Good books on getting a "Programming mindset"?

Any good books that delve into the mindset of programming, such as looking at problems in a way that can be derived into intutive algorithms rather than brute force, teaching how to make good object oriented design in a general sense, stuff like that.

I find C++ Programming Language to be an excellent book also on programming in general.

Addison Wesley's Design Patterns Explained by Shalloway and Trott is an excellent source for OOP. It will help you make sense of the GOF.

Addison Wesley also published Exceptional C++ and More Exceptional C++. I never bought them, but have browsed through them before and they seem two excellent books on problem and programming puzzles solving.

Finally I find AI and math applied to programming books very refreshing on what comes to the power of a programming language to translate and solve real world problems.

Originally Posted by brewbuck:Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

I actually started to understand the design patterns through that one. However I found the book too distracting for me. Their teaching philosophy may work... but it didn't for me. I would recommend it also though. It was lent (is this the right word?) by a friend who only had good things to say about it.

Originally Posted by brewbuck:Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

Go for it is my opinion
But also go for Shalloway & Trott's. This one really opened my eyes. Very well written, dense sometimes but just slow down your reading, and highly informative. Covers the whole GOF and doesn't try to draw you ducks to explain things.

EDIT: The preface alone is already an eye opener. Might as well read that part while on the bookstore if you can't afford the book right now.

EDIT2: Oh... and you should also ask for some good books on Templates. A good source for what was your initial request. I can't suggest anything in there unfortunately. I'm currently developing with wxWidgets which doesn't support templates at its core. So I'm kinda forced out of it (I don't have to, but I should). It really bugs me because I wanted to get more acquainted with class templates.

Last edited by Mario F.; 04-03-2008 at 09:23 PM.

Originally Posted by brewbuck:Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

I was thinking about writing a book about programming mindsets, I'll let you guys have chapter for free. Let me now if you think is good:

Find a nice quiet hole with a computer and the internet
Deprive your senses of all input except that comming from the IDE
Chase off any intefering people with the home made weapon of choice
Try rewiring your visual cortex, so that it interfaces with a serial cable

I would recommend too, developing your ability to solve logic problems. There's no reason to buy a book for that, but you can. I don't have one to recommend. I've had to do these throughout my computer science courses, and maybe there was a reason beyond throwing more homework at us. I'll try to dig one up:

As you'll learn from the site, solving a logical problem involves answering questions based on clues, usually very particular ones. If you're trying to devise a new algorithm, you'll most likely have deduced just enough information to solve the problem and get the routine working. Building that skill requires practice.

Give it a try, it might be more fun for you than sudoku or crosswords.

I actually got an A last semester in my Logic course , but I don't know if that can translate to other areas.

It sure can. Just not in the way you are probably thinking.

You ability to solve puzzles or computing problems is as much a talent as it is an acquired skill. You'll keep refining it with experience (life experience) and as you are confronted with those computing problems. I seem to believe you have to have a natural talent for it, but from there it must be exercised.

It is probably why you won't see many books here being advertised as the solution to that problem. It's because you can't learn it from a book. Any book that tells you otherwise probably deserves the same treatment as "How to Get Rich" books.

I suggested programming books since quiet frankly it should be about the knowledge on how to put into practice your problem solving skills. OOP and templates are powerful tools in this regard. Good OOP and good Templating, that is. These tools are much better than the if-else programming we see so widespread. Why? Because they provide you with exactly the canonical problem solving mechanism; to divide the problem into its parts, solve those, and glue them back into the final solution.

And in fact, it's my belief, once you are comfortable around these tools your problem solving skills will only increase further and faster. C++ only becomes interesting when we start taking advantage of what it was designed for.

I'm aware this may seem like a stick being hammered on C's head. It's only partially. I too advocate the general idea "C++ is a better C". But that doesn't preclude C's ability to handle everyday problems. It just means C++ has other, better, tools.

Originally Posted by manav

Sorry people, but, what is GOF?

Gang of Four. An affectionate term for the group of 4 people that wrote "Design Patterns, Elements of Reusable Object-Oriented Software", published by the usual suspects Addison-Wesley. This is probably THE book on object oriented programming and design. Before that, there was a void. After that many people in the world opened their mouths in awe and shock and couldn't say a word for days.

EDIT: It is, however, also hard to read. And as such other books were written for the single purpose of explaining the first book

Last edited by Mario F.; 04-04-2008 at 08:40 AM.

Originally Posted by brewbuck:Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.