liveBook · Manning

Creative problem solving

As explained in The Creative Programmer

Creative problem solving is an approach to solving problems that combines idea generation with evaluation and implementation.

Creative problem solving combines generating possibilities with judging and carrying them into action. In programming, it is not a fixed talent or a single trick: it draws on technical knowledge, communication, constraints, critical thinking, curiosity, state of mind, and practical techniques. The aim is novel, actionable insight for a real problem—not creativity for its own sake. section 9.0 section 2.6 section 5.3

Start with enough knowledge to have material to recombine. Gather information, rewrite it in your own words, connect seemingly unrelated notes, revisit them, and act on what emerges. A personal knowledge system can serve as external memory, but it must be maintained rather than merely collected. section 2.6

Use techniques as adaptable habits rather than guarantees:

  • Name constraints openly, distinguish those imposed by the situation from those you choose, and look for a workable level of constrainedness. section 4.7
  • Avoid rejecting an idea as impossible before investigating it; use divergent thinking to seek alternatives without mistaking it for all of creativity. section 4.7
  • Change perspective by zooming out, switch tools, explore side roads, subtract unnecessary parts, or temporarily step away from a roadblock. section 8.5
  • Study and remix ideas respectfully, seek inspiration beyond technology, and critically evaluate the tools in a creative toolbox. section 8.5

A project-specific self-check

Rate your engagement with the seven themes against a recent assignment on a five-point scale. Average each theme and sketch the profile as a spider diagram. Treat the result as an honest, project-dependent prompt for improvement, not a catchall measure of creativity. section 1.4.2

Table 1.1 The full set of 56 questions from the Creative Programming Problem Solving Test rubric (view table figure)

1. Technical knowledge

1

2

3

4

5

I have gained a lot of knowledge during the project.

 

 

 

 

 

I learned and applied new practical programming techniques.

 

 

 

 

 

I have gained insight into the problem domain.

 

 

 

 

 

The technical aspect of programming appealed to me.

 

 

 

 

 

I thought about my learning process and how to improve it.

 

 

 

 

 

I felt comfortable with this project because many aspects were unknown.

 

 

 

 

 

I tried to relate the new knowledge to something I know.

 

 

 

 

 

Thanks to the project I also gained knowledge of other things outside of coding.

 

 

 

 

 

2. Communication

1

2

3

4

5

I regularly asked for feedback from my fellow colleagues.

 

 

 

 

 

I visualized the problem on a whiteboard or on paper.

 

 

 

 

 

I regularly asked feedback from my clients and/or end users.

 

 

 

 

 

I helped my teammates with their own tasks.

 

 

 

 

 

My own tasks were completed on time so that teammates did not run into deadline troubles.

 

 

 

 

 

I supported the ideas and efforts of my teammates.

 

 

 

 

 

I was so proud of our result that I showed it to everyone.

 

 

 

 

 

I thoroughly thought through suggestions made by others.

 

 

 

 

 

3. Constraints

1

2

3

4

5

I regularly thought about the correctness of my solution.

 

 

 

 

 

I did not perform less well due to time pressure.

 

 

 

 

 

I tried to make my code as elegant as possible.

 

 

 

 

 

I tried to identify the constraints of the assignment.

 

 

 

 

 

I had the program tested by friends and/or family (if possible).

 

 

 

 

 

I could make good decisions even though there was a lot of creative freedom.

 

 

 

 

 

Coding on short notice accelerated my learning process.

 

 

 

 

 

I regularly tested the program myself and paid attention to its ease of use.

 

 

 

 

 

4. Critical thinking

1

2

3

4

5

In discussions about problems, I often suggested alternatives.

 

 

 

 

 

I regularly carefully weighed up the various options we had.

 

 

 

 

 

I dared to completely rewrite my code when it didn’t go well.

 

 

 

 

 

I used multiple sources to find out information myself.

 

 

 

 

 

I think it was important to ask teammates how they implemented something.

 

 

 

 

 

I always check the credibility of the source when I look something up.

 

 

 

 

 

It was important that I 100% understood why something works the way it did.

 

 

 

 

 

Looking at other projects made me reflect on my own.

 

 

 

 

 

5. Curiosity

1

2

3

4

5

During the project, I got very much out of my comfort zone.

 

 

 

 

 

Many parts of the project piqued my curiosity.

 

 

 

 

 

I enjoyed getting involved in many aspects of the project.

 

 

 

 

 

I enjoyed really immersing myself in some aspects.

 

 

 

 

 

I was stimulated by the complexity of the project.

 

 

 

 

 

I felt the urge to implement extras.

 

 

 

 

 

I had a lot of fun while developing the project.

 

 

 

 

 

I didn’t have to commit and push myself to finish the project.

 

 

 

 

 

6. Creative state of mind

1

2

3

4

5

I remained focused for a long time on one part of the project.

 

 

 

 

 

I used productivity tools to focus more on the essence of the problem.

 

 

 

 

 

I found the experience to be very rewarding.

 

 

 

 

 

Time seemed to fly while working.

 

 

 

 

 

I found that I knew enough to meet the high demands of the project.

 

 

 

 

 

Programming went almost automatically.

 

 

 

 

 

I knew exactly what I wanted to achieve.

 

 

 

 

 

I was not concerned with what outsiders thought of my code.

 

 

 

 

 

7. Creative techniques

1

2

3

4

5

I used many different methods to solve a single problem.

 

 

 

 

 

I employed knowledge from another domain to solve something.

 

 

 

 

 

I combined different ideas to tackle a problem.

 

 

 

 

 

I deliberately took occasional breaks to let things sink in.

 

 

 

 

 

I brainstormed with others to come up with new ideas.

 

 

 

 

 

I took a step back now and then to see things as a whole.

 

 

 

 

 

In case of problems I let myself be inspired by other projects.

 

 

 

 

 

I never felt completely stuck.

 

 

 

 

 

Use the 56 prompts to inspect technical knowledge, communication, and the other dimensions of creative programming for one specific project. section 1.4.2

Creative self-expression can motivate people to program, but drawing an impressive scene alone does not address the larger task of systemic problem solving. Creativity remains a means for solving meaningful software problems, and excessive novelty can reduce maintainability. section 5.3 section 8.5

How The Creative Programmer covers it

How deep it goes
Connects seven themes to actionable habits, constraints, assessment, and limits without prescribing a single universal method.
Examples
Uses a five-point project self-assessment, spider diagram, Visual Basic constraints, and creative coding with Processing.
What it assumes
Assumes a baseline of programming knowledge, arguing that creative problem solving needs technical input to recombine.
What you can do after
Apply it by gathering knowledge, reframing constraints, varying techniques, and evaluating ideas against meaningful software needs.
How it connects
Links technical knowledge, communication, constraints, critical thinking, curiosity, state of mind, divergent thinking, and brainstorming.

Related concepts

This explainer was generated by Manning's knowledge graph from the text of The Creative Programmer. The section links point to the parts of the book it draws on.