Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
How does one improve one's problem-solving ability?

I'm focusing on becoming a better developer and one area I'd like to focus on is improving my problem solving skills.

The really good developers I know understand the problem very well and know how to approach HOW to find out what they don't know. I've often heard that a developer must know his problem domain well or his code can't be built upon a poor understanding of the business. I've almost never been in an environment where I was given time to sufficiently learn the business enough.

Can others share their thoughts on best practices of how to approach solving a problem, or more importantly... how to best approach finding out the information you need to know in order to get to a reasonable answer or hypothesis?

Are there any good books or resources for this?

share|improve this question
    
I know this will sound a bit conceded but the best way to improve your problem solving skills is by solving problems –  Asaf Jul 20 '11 at 21:27
add comment

marked as duplicate by ChrisF Jul 20 '11 at 21:34

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

2 Answers

I think you hit the nail on the head with the real question, "how to best approach finding out the information you need to know in order to get to a reasonable answer or hypothesis?"

The best problem solvers are usually the developers that have enough experience to have "seen it all". When you have experience, you know that there are 20 ways to accomplish Task X. But 19 of those ways are reduced security, hurt performance, add unnecessary complixities, etc. It's through experience and seeing these issues, or issues similar to it that all the developer to deduce what is the best route.

share|improve this answer
add comment

I think one of the most valuable lessons I've learned over the past year or so, in my efforts to try to do more and learn more as a programmer, is that very often, the thing you're trying to do contains no new problems. It just contains a new combination of old problems. If you can analyze your project and break it up into discrete logical segments, odd are fairly good that you'll be able to find explanations of the general solution to each segment. From there, it's often fairly trivial to implement and integrate the piecemeal solutions.

If you buy that logic (and granted, I know well that it's not universally true), then it suggests that the most valuable skill in your problem solving is analyzing to find the discrete logical segments. Doing that pretty quickly becomes a domain-specific problem, and it's harder to give general advice for that, but the key, in my view, is to study the problem you are trying to solve from multiple angles, at multiple depths (i.e. levels of abstraction), until you can say "My problem is made up of A, E, and I, so I think that to solve it, I'll need to be able to do O and U, and sometimes Y."

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.