What are some good books today on c++? I was looking for something teaches good design (OOP, templates, etc.) but is up to date (some older stuff that I've read seems a bit dated). Just wondering what people here recommend. I've only read Thinking in C++ so far (vol1, but I'm working on vol2).
While I haven't read enough c++ books to give a recommendation on my own behalf, I was encouraged to read Effective C++ by Scott Meyers. It should be reasonably up-to-date as it's now on its third edition.
I read the second edition and it was very helpful. Some of the examples I thought could have been better - it focussed on image manipulation which wasn't always appropriate - but overall an excellent resource.
have you tried searching on amazon? Its one of the things I do when I´m looking to research a new area or programming language. Search for the listamanias, read the different reviews, some of the books you can browse through the contents to get a feel if its what you´re looking for or not.
I like "thinking in...." books by Bruce Eckel myself
My recommendation would be the one you're already reading - Thinking in C++ by Bruce Eckel is an excellent book, with good practical exercises. If you were just starting out, I'd also recommend obtaining the (freely available online) "Thinking in C" seminars. That's how I got started, and it is a wonderfully educational (and intuitive) walkthrough on the syntax and manner of C (designed to give a good foundation for C++).
I see though that you're particularly interested in good design principles. For that I must say I don't know off-hand of any great books. A good approach, however, is to pick up a good library API. Specifically, I strongly recommend Juce. It is free for use, requiring a license fee only if/when you wish to release closed source projects. I've been using it for years, for a number of reasons:
1- It is VERY COMPREHENSIVE (covers graphics, audio, files, XML, containers, etc...)
2- It is PRETTY! (the vector graphics are both pleasant and scalable, and highly customisable)
3- It is CROSS PLATFORM (the same code can be compiled on windows, linux and MacOSX)
4- It is WELL DESIGNED, which not only makes it a joy to code with, but it also effortlessly teaches you good class design principles as you learn by example.
Plus, the userforum is very active and full of helpful people (like me) to provide assistance if you face trouble.
Choosing a library to use is good for several reasons. You quickly learn tricks/techniques in class design simply by using well made specimens. You also give yourself a whopping toolset with which to make things - there really is no need to reinvent all the things you're likely to need just for the sake of learning, especially not until you're experienced in the grander scale of building a program which actually makes heavy use of them. You need to have an understanding of how the objects play with each other on a higher level before you can really exercise flair in creating them from scratch; without such experience, it's likely that what you make simply slows you down when you could instead be learning broader aspects of programming.
You can imagine that a scupltor would have a more efficient development of their design abilities if they, once learning the fundamentals of the craft, focused on the bigger picture and their end goals. If they simply started with all the fine details (getting all the 'parts' just right entirely separately, without allowing their broader end-oriented design skills to develop) then it's easy to conceive that putting them together properly might yield more problematic results. In a similar manner, while you need to learn the important fundamentals of the language and its mechanisms, you will develop good design skills a lot quicker if you allow yourself to use ready-made classes to manifest your intentions. You save yourself time, and you also get a feel for how they operate; when you're more handy with things, you can spot where improvements could be made, and THEN it can be worthwhile building them yourself.
Sorry if this rant went way off course early on - you didn't really indicate the level you're at - but regardless, it's advice that I wish I'd been presented with earlier in my career.