DEV Community
Posted on Aug 10, 2022
How to develop strong problem solving skills as a software developer
Introduction.
It is generally known that problem solving is an essential skill for software engineers.
Good problem solving skills involve being able to think creatively and analytically, breaking down problems into smaller parts and using a systematic approach to find solutions. Strong problem solving skills are essential for a successful career in software development. In this article we will review some approach.
Various Methods
Trial and error method.
The trial and error method is a common problem-solving technique in which potential solutions are tried out one by one until a working solution is found. This method can be used for both simple and complex problems.
Divide and conquer
Another approach is to use a more systematic method, such as divide and conquer or reduction. Divide and conquer is a software engineering technique for solving complex problems by breaking them down into smaller, more manageable pieces. This allows for more efficient and effective problem solving by breaking down a complex problem into smaller, more manageable sub-problems. Once these sub-problems have been solved, they can be combined to solve the larger, more complex problem.
One common example of divide and conquer is the use of recursion. Recursion involves breaking a problem down into smaller sub-problems, solving each sub-problem, and then combining the solutions to the sub-problems to solve the larger problem. Another common example is the use of algorithms, such as the quick sort algorithm, which break a problem down into smaller pieces, solving each piece, and then combining the solutions to the pieces to solve the larger problem.
Once a solution is found, it is important to learn from the experience and use that knowledge to improve future problem solving skills. This includes understanding what went wrong, what could have been done better, and how similar problems can be avoided in the future. By taking these steps, software developers can become more effective problem solvers.
Problem solving skills is important in its own way. As a software developer, you should try to develop all of these skills in order to be successful.
Analytical skills:
Analytical skills are the ability to collect and analyze data, identify patterns and trends, and make decisions based on that information. They involve both logical and creative thinking, as well as the ability to pay attention to detail. Strong analytical skills are important in many different fields. Some examples:
- Being able to break down a problem and identify the various components
- Being able to identify patterns and trends
- Being able to see relationships between different pieces of data
- Being able to make decisions based on data
- Being able to solve complex problems
Creative thinking
Creative thinking in computer science is all about coming up with new and innovative ways to solve problems. It’s about thinking outside the box and coming up with creative solutions that nobody has thought of before.
It’s important to be creative in computer science because it’s a constantly evolving field. If you’re not constantly coming up with new ideas, you’re going to fall behind. Creative thinking is what keeps computer science moving forward.
If you want to be successful in computer science, you need to be creative. It’s not enough to just learn the basics. You need to be constantly thinking of new and better ways to do things. So if you’re not a naturally creative person, don’t worry. Just keep working at it and you’ll get there.
Logical reasoning
Logical reasoning is a process of making deductions based on given information. In computer science, this process is often used to solve problems and to create new algorithms. To reason logically, one must first identify the premises and then use them to reach a valid conclusion.
Practice is one of the best ways to improve your problem solving skills. You can do this by working on coding challenges, participating in online coding contests, or simply trying to solve problems you encounter in your daytoday work. Collaboration is another great way to improve your problem solving skills. When you work with others, you can learn from their experiences and share your own insights. This can help you develop a more well rounded approach to problem solving.
If you're a software developer, congratulations! You have chosen one of the most mentally demanding professions there is. And if you want to be successful, you need to have strong problem solving skills.
My last tip: get comfortable with being stuck! It's normal to feel stuck when you're trying to solve a problem and don't be afraid to ask for help. We all need help from time to time, and there's no shame in admitting that you need help.
So there you have it! Follow these tips and you'll be well on your way to developing strong problem solving skills as a software developer.
Like this article? Join the discussion in our Discord channel .
Top comments (25)
Templates let you quickly answer FAQs or store snippets for re-use.
- Work Lead Dev
- Joined Jul 12, 2022
For students , don't underestimate the mathematics. You definitively don't need a master degrees in maths to be a successfull developer BUT , mathematics train your brain to think. All this theorems you probably never used in real world , all thoses equation you resolved in high school helped your logical reasoning.
Finally, to get better at resolving problem you definitely should resolve problem :P The more you resolve , the better you get !
- Joined Mar 14, 2022
I agree with you! I mentioned it, practice and practice.. About maths it is also another alternative
- Location Yenagoa, Nigeria
- Joined Feb 1, 2021
You're right, solving mathematical problems help increase logical reasoning, and I believe that's a major reason we do maths in Computer Science. Working with numbers is a top-tier ability if you want to become a successful "software engineer". Thanks
- Joined Sep 21, 2021
Science shows that there really is no knowledge transfer between unrelated fields. There is essentially no way to get overall better at thinking. You either can relate what you know already to the thing or you can't. In first case it's experience, not brain trained to thinking, in second it depends on if you learned how to learn.
Logical reasoning is a small part that everyone does even without thinking, but it doesn't transfer if you don't use abstractions to relate what you don't know with what you do know.
You can get better at resolving problems overall, but it's a tiny improvement if you don't focus on learning how to solve problems. Solving problems on it's own gives you experience you can use at solving similar things. But it won't help with different problems.
That being said if you can relate math you learned to problems you need to solve it can sometimes make something impossible into something very easy. That on it's own is a good reason to get good at maths. The other one is training on how to read information dense domain texts.
You're right, solving mathematical problems help increase logical reasoning, and I believe that's a major reason we do maths in Computer Science. Working with numbers is a top-tier ability if you want to become a successful "software engineer". Thanks.
- Location India
- Joined Aug 17, 2019
Just like Neil deGrasse Tyson said, It is not about finding the value of x, It is about process for finding the x.
- Location Munich, Germany
- Work Software Development Team Lead
- Joined Oct 4, 2019
I have to disagree, especially on the Maths->Logics path. I found it's a lot easier to go into Logics without Maths, even though the basic principles are similar (since both are just formal languages).
- Education Computer Science
- Work Senior Software Developer at Syskron GmbH
- Joined Jan 30, 2021
What he meant is that math trains your brain. Either way it’s math or not it’s necessary to think structured to solve programming problems. I have seen so many bad code written my mathematics (no offense 😃)
- Email [email protected]
- Location Living in the path between home and office
- Education The school of life and entry points
- Work 📖 Researching and learning everything about API Security and Business Logic
- Joined Jun 22, 2022
- Location Nashville
- Education Bootcamp Grad
- Work Fullstack Developer
- Joined Mar 5, 2017
You have to joke so you don't cry.
- Email [email protected]
- Location Budapest, Hungary
- Education engineering
- Work software developer @ itemis
- Joined Dec 25, 2021
what a cool drawing!
Hahaha @apimike humor is important!
I just said that math was a way , and because it's basically taught in every school of the world (contrary to other knowledge) it's important to embrace it and understand that what you are taught is not how to multiply 2 number but actually how to think.
I realized it way too late, I always hated math when I was young because I wasn't able to figure out the point of what I was taught.
The misconception is , that you have to be good at math to be a good developer. Indeed that completely false (unless your are developing for some specific field).
- Joined Nov 24, 2020
Being a successful software developer, one needs to be open to learning and unlearning. I've learnt and unlearnt and am grateful I did. Most of the time I share with colleagues and friends, I got to find out the knowledge that was most neglected, tends to be a challenge for someone else.
It's a mentally demanding field. It's not just a job, it's a way of life.
- Location Scotland, United Kingdom
- Joined Nov 13, 2020
this is spot on
Thanks for the article, it resonates.
I read most of the comments and can't stay quiet. From my years of experience, math can be a really powerful tool when it comes to solving problems. Ofcourse is only one of the tools out there that can empower a programmer. Another tool I found to be crucial are flow charts. Being able to construct them the right way can help a lot.
e. g. This problem I solved it using only math. And I have used many concepts of math and physics for game development. To understand algebra, arrays, matrixes, vectors, magnituds, forces, inertia, acceleration, etc... Can be crucial on the development of certain softwares. But it all depends the area in which you are coding.
- Email [email protected]
- Joined Apr 23, 2019
a great read
- Location Dhaka, Bangladesh
- Education Dep. of Computer Science & Engineering(CSE), BAIUST
- Work Unemployed
A newbie here. I've a different problem . i.e. I face difficulty while implementing the code but I know the theory & logic behind it. Any suggestion/advice for me anyone ?
Hiiii maybe I will write an article about it ! Nice idea :)
- Location Rwanda
- Joined Jul 30, 2022
I think, being open-mind is a way to simulate our brain when it comes to creative thinking. btw nice article
- Joined Jul 9, 2020
I wonder if there is literature about how to improve and train your problem solving skills. Could you recommend books about this topic?
Personnaly I don't know books on this topic, but if you have got something share it with us :)
- Joined Sep 17, 2021
I have a short, simple rule: be creating and imaginary as much as possible. That's to say whatever others do you can do differently and/or more crazily.
Some comments may only be visible to logged-in visitors. Sign in to view all comments.
Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink .
Hide child comments as well
For further actions, you may consider blocking this person and/or reporting abuse
Remove Redundant Subscriptions in Angular with @jsverse/letify
Shahar Kazaz - Oct 30
Add a sidebar with options in a Filament resource
Sergio Peris - Oct 30
How I can run elasticsearch locally for development using docker?
Dimitrios Desyllas - Oct 30
Exploring ChatGPT's New Search Feature: A Powerful Tool for Real-Time Information
Muhammad Essa - Nov 3
We're a place where coders share, stay up-to-date and grow their careers.
How to think like a programmer — lessons in problem solving
By Richard Reis
If you’re interested in programming, you may well have seen this quote before:
“Everyone in this country should learn to program a computer, because it teaches you to think.” — Steve Jobs
You probably also wondered what does it mean, exactly, to think like a programmer? And how do you do it??
Essentially, it’s all about a more effective way for problem solving .
In this post, my goal is to teach you that way.
By the end of it, you’ll know exactly what steps to take to be a better problem-solver.
Why is this important?
Problem solving is the meta-skill.
We all have problems. Big and small. How we deal with them is sometimes, well…pretty random.
Unless you have a system, this is probably how you “solve” problems (which is what I did when I started coding):
- Try a solution.
- If that doesn’t work, try another one.
- If that doesn’t work, repeat step 2 until you luck out.
Look, sometimes you luck out. But that is the worst way to solve problems! And it’s a huge, huge waste of time.
The best way involves a) having a framework and b) practicing it.
“Almost all employers prioritize problem-solving skills first. Problem-solving skills are almost unanimously the most important qualification that employers look for….more than programming languages proficiency, debugging, and system design. Demonstrating computational thinking or the ability to break down large, complex problems is just as valuable (if not more so) than the baseline technical skills required for a job.” — Hacker Rank ( 2018 Developer Skills Report )
Have a framework
To find the right framework, I followed the advice in Tim Ferriss’ book on learning, “ The 4-Hour Chef ”.
It led me to interview two really impressive people: C. Jordan Ball (ranked 1st or 2nd out of 65,000+ users on Coderbyte ), and V. Anton Spraul (author of the book “ Think Like a Programmer: An Introduction to Creative Problem Solving ”).
I asked them the same questions, and guess what? Their answers were pretty similar!
Soon, you too will know them.
Sidenote: this doesn’t mean they did everything the same way. Everyone is different. You’ll be different. But if you start with principles we all agree are good, you’ll get a lot further a lot quicker.
“The biggest mistake I see new programmers make is focusing on learning syntax instead of learning how to solve problems.” — V. Anton Spraul
So, what should you do when you encounter a new problem?
Here are the steps:
1. Understand
Know exactly what is being asked. Most hard problems are hard because you don’t understand them (hence why this is the first step).
How to know when you understand a problem? When you can explain it in plain English.
Do you remember being stuck on a problem, you start explaining it, and you instantly see holes in the logic you didn’t see before?
Most programmers know this feeling.
This is why you should write down your problem, doodle a diagram, or tell someone else about it (or thing… some people use a rubber duck ).
“If you can’t explain something in simple terms, you don’t understand it.” — Richard Feynman
Don’t dive right into solving without a plan (and somehow hope you can muddle your way through). Plan your solution!
Nothing can help you if you can’t write down the exact steps.
In programming, this means don’t start hacking straight away. Give your brain time to analyze the problem and process the information.
To get a good plan, answer this question:
“Given input X, what are the steps necessary to return output Y?”
Sidenote: Programmers have a great tool to help them with this… Comments!
Pay attention. This is the most important step of all.
Do not try to solve one big problem. You will cry.
Instead, break it into sub-problems. These sub-problems are much easier to solve.
Then, solve each sub-problem one by one. Begin with the simplest. Simplest means you know the answer (or are closer to that answer).
After that, simplest means this sub-problem being solved doesn’t depend on others being solved.
Once you solved every sub-problem, connect the dots.
Connecting all your “sub-solutions” will give you the solution to the original problem. Congratulations!
This technique is a cornerstone of problem-solving. Remember it (read this step again, if you must).
“If I could teach every beginning programmer one problem-solving skill, it would be the ‘reduce the problem technique.’ For example, suppose you’re a new programmer and you’re asked to write a program that reads ten numbers and figures out which number is the third highest. For a brand-new programmer, that can be a tough assignment, even though it only requires basic programming syntax. If you’re stuck, you should reduce the problem to something simpler. Instead of the third-highest number, what about finding the highest overall? Still too tough? What about finding the largest of just three numbers? Or the larger of two? Reduce the problem to the point where you know how to solve it and write the solution. Then expand the problem slightly and rewrite the solution to match, and keep going until you are back where you started.” — V. Anton Spraul
By now, you’re probably sitting there thinking “Hey Richard... That’s cool and all, but what if I’m stuck and can’t even solve a sub-problem??”
First off, take a deep breath. Second, that’s fair.
Don’t worry though, friend. This happens to everyone!
The difference is the best programmers/problem-solvers are more curious about bugs/errors than irritated.
In fact, here are three things to try when facing a whammy:
- Debug: Go step by step through your solution trying to find where you went wrong. Programmers call this debugging (in fact, this is all a debugger does).
“The art of debugging is figuring out what you really told your program to do rather than what you thought you told it to do.”” — Andrew Singer
- Reassess: Take a step back. Look at the problem from another perspective. Is there anything that can be abstracted to a more general approach?
“Sometimes we get so lost in the details of a problem that we overlook general principles that would solve the problem at a more general level. […] The classic example of this, of course, is the summation of a long list of consecutive integers, 1 + 2 + 3 + … + n, which a very young Gauss quickly recognized was simply n(n+1)/2, thus avoiding the effort of having to do the addition.” — C. Jordan Ball
Sidenote: Another way of reassessing is starting anew. Delete everything and begin again with fresh eyes. I’m serious. You’ll be dumbfounded at how effective this is.
- Research: Ahh, good ol’ Google. You read that right. No matter what problem you have, someone has probably solved it. Find that person/ solution. In fact, do this even if you solved the problem! (You can learn a lot from other people’s solutions).
Caveat: Don’t look for a solution to the big problem. Only look for solutions to sub-problems. Why? Because unless you struggle (even a little bit), you won’t learn anything. If you don’t learn anything, you wasted your time.
Don’t expect to be great after just one week. If you want to be a good problem-solver, solve a lot of problems!
Practice. Practice. Practice. It’ll only be a matter of time before you recognize that “this problem could easily be solved with .”
How to practice? There are options out the wazoo!
Chess puzzles, math problems, Sudoku, Go, Monopoly, video-games, cryptokitties, bla… bla… bla….
In fact, a common pattern amongst successful people is their habit of practicing “micro problem-solving.” For example, Peter Thiel plays chess, and Elon Musk plays video-games.
“Byron Reeves said ‘If you want to see what business leadership may look like in three to five years, look at what’s happening in online games.’ Fast-forward to today. Elon [Musk], Reid [Hoffman], Mark Zuckerberg and many others say that games have been foundational to their success in building their companies.” — Mary Meeker ( 2017 internet trends report )
Does this mean you should just play video-games? Not at all.
But what are video-games all about? That’s right, problem-solving!
So, what you should do is find an outlet to practice. Something that allows you to solve many micro-problems (ideally, something you enjoy).
For example, I enjoy coding challenges. Every day, I try to solve at least one challenge (usually on Coderbyte ).
Like I said, all problems share similar patterns.
That’s all folks!
Now, you know better what it means to “think like a programmer.”
You also know that problem-solving is an incredible skill to cultivate (the meta-skill).
As if that wasn’t enough, notice how you also know what to do to practice your problem-solving skills!
Phew… Pretty cool right?
Finally, I wish you encounter many problems.
You read that right. At least now you know how to solve them! (also, you’ll learn that with every solution, you improve).
“Just when you think you’ve successfully navigated one obstacle, another emerges. But that’s what keeps life interesting.[…] Life is a process of breaking through these impediments — a series of fortified lines that we must break through. Each time, you’ll learn something. Each time, you’ll develop strength, wisdom, and perspective. Each time, a little more of the competition falls away. Until all that is left is you: the best version of you.” — Ryan Holiday ( The Obstacle is the Way )
Now, go solve some problems!
And best of luck ?
Special thanks to C. Jordan Ball and V. Anton Spraul . All the good advice here came from them.
Thanks for reading! If you enjoyed it, test how many times can you hit in 5 seconds. It’s great cardio for your fingers AND will help other people see the story.
If you read this far, thank the author to show them you care. Say Thanks
Learn to code for free. freeCodeCamp's open source curriculum has helped more than 40,000 people get jobs as developers. Get started
Discover more from daily.dev
Personalized news feed, dev communities and search, much better than what’s out there. Maybe ;)
Critical Thinking: Key Skill for Software Developers
Learn why critical thinking is essential for software developers and how to improve this key skill. Find practical tips, overcome obstacles, and measure progress in the ever-changing software development field.
Critical thinking is essential for software developers to solve complex problems and create effective solutions. Here's what you need to know:
- Definition : Breaking down systems, assessing information, and making informed decisions
- Benefits : Reduces errors, improves code quality, enhances communication, keeps skills current
- Common issues without it : Bad code, missed bugs, slow work, more errors, safety risks, unhappy users
- Develop analytical reasoning
- Boost problem-solving skills
- Stay curious and keep learning
- Communicate better with others
Practical tips :
- Ask better questions
- Use logical reasoning
- Consider different viewpoints
- Learn from past experiences
Overcoming obstacles :
- Deal with time pressure by prioritizing tasks
- Handle reluctance to change by explaining benefits
Measuring progress :
- Track project results, code quality, and teamwork
- Compare before and after performance
Remember: Keep working on your thinking skills, make fact-based decisions, and try new approaches to stay effective in the ever-changing software development field.
Related video from YouTube
2. Problems Caused by Poor Critical Thinking
When software developers lack critical thinking skills, it can lead to many issues. These problems can affect both the software quality and the developers themselves.
2.1 Common Issues in Development
Without good critical thinking, developers might face:
- Bad code : Code that's hard to fix or use, leading to more work later
- Missed bugs : Not catching important errors, which can cause crashes or data loss
- Slow work : Using methods that waste time and money
2.2 Effects on Software Quality
Poor critical thinking can hurt software quality in several ways:
2.3 Impact on Developer Work
Developers who don't think critically may also face personal challenges:
- More stress : Feeling overwhelmed when dealing with tough problems
- Less work done : Wasting time and effort on unnecessary tasks
- Fewer job options : Finding it hard to grow in their career or take on bigger projects
3. How to Improve Critical Thinking Skills
Here are some steps to help software developers boost their critical thinking:
3.1 Develop Analytical Reasoning
To think more analytically:
- Break big problems into smaller parts
- Look at issues from different angles
- Study the facts before deciding
This helps you solve problems step-by-step and make better choices.
3.2 Boost Problem-Solving Skills
To get better at solving problems:
- Practice coding regularly
- Work with others to find solutions
- Ask for feedback on your code
- Learn about different ways to organize data
- Join coding contests
These activities help you think through problems more clearly.
3.3 Stay Curious and Keep Learning
To keep your mind sharp:
- Ask questions about new ideas
- Be open to learning from others
- Keep up with new tech trends
This helps you grow as a developer and think of new solutions.
3.4 Communicate and Work Better with Others
Good communication helps critical thinking:
- Listen carefully to others
- Explain your ideas clearly
- Use simple words instead of jargon
- Talk through disagreements calmly
This makes it easier to work in teams and share ideas.
4. Practical Ways to Think More Critically
Here are some hands-on tips to help software developers think more critically:
4.1 Ask Better Questions
Good questions help you understand things better. Try to:
- Keep an open mind
- Avoid guessing or leading questions
- Ask for more details when needed
- Get others to share their ideas
Asking good questions helps you get more info and make better choices.
4.2 Use Logical Reasoning
Logical reasoning helps you solve problems step-by-step. As a developer, you can:
- Spot and avoid common thinking mistakes
- Check if ideas make sense
- Write better code that works well
Using logic helps you make smart choices and write good code.
4.3 Look at Different Views
Thinking about different ideas helps you find better answers. Try to:
- Talk to team members with different backgrounds
- Listen to new ideas
- Avoid just agreeing with everyone
- Think about the good and bad points of each idea
Looking at different views helps you come up with new ideas and work better with others.
4.4 Learn from What You've Done
Looking back at your work helps you get better. Try to:
- Check your code with others regularly
- Think about what went well and what didn't
- Look for patterns in your work
- Be open to feedback and try to improve
Learning from your past work helps you write better code and become a better developer.
sbb-itb-bfaad5b
5. overcoming obstacles to better thinking, 5.1 dealing with time pressure.
Time limits can make it hard to think well. When deadlines are tight, people often rush and make mistakes. This can lead to poor software.
To handle time pressure, try these tips:
Using these ideas can help you think better even when time is short.
5.2 Handling Reluctance to Change
Old ways of working can be hard to change. But good thinking often means questioning old ideas and trying new things.
To help with change:
These steps can help teams accept new ways of thinking and working.
6. Tracking Improvements in Critical Thinking
6.1 how to measure progress.
To track how well you're getting better at critical thinking, it's important to set clear ways to measure your progress. This helps you see where you're improving and where you still need work.
Here are some ways to measure your progress:
6.2 Before and After Comparison
Looking at how things were before and after can show you how much better you've gotten at critical thinking. This can help you see the good changes in your work.
Here's an example of what this might look like:
7. Conclusion
7.1 key points to remember.
Critical thinking is a must-have skill for software developers. It helps them:
- Break down big problems
- Spot patterns
- Weigh options
- Make smart choices
In this article, we looked at why critical thinking matters in software development. We also shared ways to get better at it. By using critical thinking, developers can:
- Come up with new ideas
- Fix tough bugs
- Keep up with new tech
7.2 Keep Getting Better at Thinking
As software keeps changing, good thinking skills become even more important. To stay on top of your game:
How to develop critical thinking for programming?
To improve your critical thinking for programming:
- Ask questions : Understand problems fully by asking about requirements and clearing up any confusion.
- Break down problems : Split big issues into smaller parts and think about each one carefully.
- Write good code : Make your code clean and easy to understand. This helps you find and fix mistakes quickly.
- Keep learning : Stay up-to-date with new programming ideas and tools. Use online lessons and coding challenges to practice.
- Work with others : Join coding projects with other people. Share ideas and learn from each other's work.
What is critical thinking in software engineering?
Critical thinking in software engineering means:
It helps developers:
- Understand complex problems
- Find patterns in information
- Compare different options
This skill is key for dealing with the tricky and unclear issues that often come up in software development.
Related posts
- 5 Techniques to Boost Creative Problem Solving
- Systems Thinking in Software Development: Guide
- Fun Coding Problems to Enhance Skills
- 12 Tips for Giving Constructive Feedback to Developers
IMAGES
VIDEO