Becoming More Creative With Problem Solving
It can be really tough to tackle challenging programming problems. Many traditional programmers try to start at a really low level abstraction by mistakenly making it harder than it needs to be. I have been in this situation many times. First you should identify what the goal(s) of the actual problem are and try to avoid the hardest problems for later, because many times you can avoid them altogether. When you fully understand the goal(s) and have a high-level model ready, you can start to separately it into smaller parts. The problem is much easier to solve when its broken up into smaller pieces.
In addition, you should reassess your situation many times throughout the process. You don’t want to loose sight of the goal or go overboard in the scope of the project. Try to limit your solution to a core set of answers that are well developed. You can always release a version 2, 3, or 4 in the future.
The process I just described may sound a bit vague, but it seems to be one of the most common problems that software engineers face. The programming aspect isn’t usually the problem. The problem usually seems to be with analyzing the requirements, staying within the original scope, and not making it harder than it needs to be. Essentially, I am referring to a top-down approach to problem solving. This approach can help you think about the many sub-systems of the solution and focus in greater detail.
However, creative thinking comes with practice and experience in most cases. You learn and pick-up new ideas as you create more and more software. Also, sometimes you may have an idea for a solution that you think is the right way to go, but it always helps to try to develop a few alternatives so you can see it from different angles. This way you have the ability to uncover flaws in the different alternatives and you can assess the pro’s and con’s of each.
Also, if you are looking to expand your general problem solving skills then you might want to check out some of the additional resources below for some really interesting puzzles and ideas.
- Project Euler - Series of challenging math/programming problems
- [wu:riddles] - Archive of problems from various sources
- Uncommonly Difficult Tests
- Realistic Lateral Thinking Puzzles
- Lateral Thinking Problems
- Lateral Thinking Puzzles
- Facebook Puzzles - Puzzle Master Facebook Page
- Top-Down and Bottom-Up Design (Wikipedia)