Original Post
While teaching programming to my girlfriend, I've come across a gap in learning literature about programming dealing with heuristics and exercises that help shape the mind into creating algorithms. Most of the books follow the same style: "Learn programming in " or "Teach yourself in " and some are very well written and explain programming language concepts clearly. However in reading them one only learns about how to apply some concepts in the specified language and sometimes what those concepts are and why they are important. For example, you learn how to create classes in C#, why classes are good, how they work and maybe there's a comparison between the procedural and OO paradigms. These kind of books are not what I'm looking for because she is quite familiar with enough programming concepts to allow her to implement algorithms and write decent code. While she doesn't fully grasp the whole 'philosophy' behind them, she knows enough to evaluate the pros and cons of using each concept. Her problem is that she has a hard time developing both the heuristics required for the tasks presented to her and creating algorithms for given heuristics. I think that to accomplish these tasks one has to have both experience and a certain mindset, both of which are acquired over a long time through practice. I think that this process can be accelerated by carefully pointing her in the right direction of thinking. Moreover, in my opinion, such heuristics fall into two categories: reusable and single-use. An example of a reusable solution is an accumulator: z-buffers are accumulators, some lookup-tables are accumulators and one could use an accumulation structure could be used to build up statistics from events logged in a database. So, basically, I'm looking for a book or other resources that attractively deal with common problems in a gradual manner as to allow the reader to test his own ideas first, before being served a functional solution. I hope that by developing her own solutions and then comparing to existing ones to common problems she can develop the mindset for solving new challanges.