views:

1151

answers:

19

Hi all,

I have been learning C++ for three months now and in that time created a number of applications for my company. I consider myself fairly comfortable with C++ / MFC and STL, however I don't just want to be an OK programmer, I want to be a good programmer. I have a few books on best practices but I was wondering if anyone could suggest reading materials that helped them and any disciplines which should be encouraged?

Thanks!

+13  A: 

For C++, Scott Meyers books are very good, and will help take you to the next level.

If you don't already have it C++ by Bjarne Stroustrup, 3rd Edition

Mitch Wheat
+1 for Scott Meyers books. Should be required reading for all C++ programmers.
jmucchiello
+16  A: 

I would start with the Pragmatic Programmer, Code Complete, Refactoring and Design Patterns.

CheGueVerra
They're all good general non-specific language books. I though the OP was looking for C++ resources?
Mitch Wheat
The op specifically said, "suggest reading materials that helped them"
GregD
..and had C++ and MFC in the tags...
Mitch Wheat
I'm with @Che on this one. These books will provide excellent guidance.
tvanfosson
I didn't say they wouldn't.
Mitch Wheat
I would change the order, however. Code Complete is a book I really wish I had read early in my programming career. The Pragmatic Programmer I was only ready for at the time I did read it, a few years in.
glenatron
I didn't know I should have put them in a certain order....the OP asks for that helped, those books helped me, become a better programmer, no matter the language
CheGueVerra
+4  A: 

3 months into c++ and you're already comfortable with it? Sheesh, I've been learning c# for over a year and have taken numerous Microsoft courses and I'm nowhere near comfortable with it.

That being said, you'll hear Code Complete tossed about as a very good book. I'm in the process of reading it now.

GregD
Code Complete is a great book, no question. But it won't teach you the nuances of C++
Mitch Wheat
Being a better programmer is much more than learning the nuances of a particular language.
tvanfosson
i'd say that taking courses is _against_ being comfortable with anything as creative as programming. at best, they can be good to learn the basics, and to know people.
Javier
Definitely Code Complete. The book should be turned into a compulsory course in any programming curriculum. A terrific read that opens your eyes to real world programming as part of development teams.
urig
+4  A: 
Federico Ramponi
+1  A: 

Good blogs: Guru of the Week, and all the books by Herb Sutter. Those will give you quite a lot to chew already.

Modern C++ Design by Alexandrescu if you want to get a good feel for what you don't yet know, and probably don't want to know.

Code Kata's for practice!

MadKeithV
+3  A: 

Large Scale C++ Software Design by John Lakos gives guidance on design methods that will make your C++ more maintainable. It is pretty hefty but you can dip in and still get some benefits.

danio
+1  A: 

I have read several (not complete but some parts) of oreilly books on VB.net they are quite good, but if you want to be pro and have the time... You can try out MSDN forums, help other people and discuss with them hard and complex problems, I think it's the best way..

Omar Abid
A: 

learn another language. even if you won't use it, it's great for mind-opening.

I'd advice Lua, Scheme and Python. but almost anything else would do. (the most different from C, the best)

Javier
+1  A: 

Somewhat off-topic: rather than suggesting books to learn, I'd like to mention some broad topics to consider.

  • Threading. This one is not much in demand if you use MFC, but in many other areas it's indispensable. The mechanics of threading APIs are easy to pick up, but learning all the corner cases takes a lot of time and practice.

  • Closures, Map-Reduce and other lisp-like techniques. Find out what they are, why they are not supported in C++, and how they are imitated in C++ (functors, and many other cases of stateful callback objects). For this I actually have a book: "Structure and Interpretation of Computer Programs".

  • Command Line. This gives you an idea on when not to code your own programs. Command line would be Unix command line - I don't know about MS's latest experimentation in this are, but cmd.exe is awful. Get Cygwin and start experimenting.

  • Scripting languages. This gives you an idea on when not program in C++. My favorite is Perl, but many people say Python, Ruby and whatnot. Hey, learn XSLT if you're so inclined!

I am sure I left out other areas. I'll mark this as Community Wiki - feel free to add.

Arkadiy
+1  A: 

Josuttis and Vandevoorde - Templates: The Complete Guide

Daniel Earwicker
+1  A: 

As I see, nobody mentioned Bruce Eckel brilliant books "Thinking in C++". IMHO, it`s one of the best books to start your C++ development from. From my point of view, first volume is more helpful that the second, but both of them worth reading.
http://www.amazon.com/Thinking-C-Introduction-Standard-One/dp/0139798099/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1227890306&sr=8-1

chester89
Ah! We have a copy of this in the office, will take it home over the weekend and give it a read. +1.
Konrad
+1  A: 

I lot of folks can suggest more modern, up-to-date books. But I still recommend The Annotated C++ Reference Manual by Margaret A. Ellis & Bjarne Stroustrup.

The ARM was published back in '90. It's become somewhat outdated with respect to templates. STL is (obviously) absent. (Though the website at sgi.com does a good job of covering STL!)

However, the ARM is dirt cheap (used). (Shipping will exceed the cost of the book.) Its signal-to-noise ratio remains off the scale. It's very good at digging into C++'s dirty areas, explaining what was done & why.

I still use it as a reference. I rank it up there with K&R.

Mr.Ree
+1  A: 

Dietel/Dietel "How to program C++"... I still have this book on my desk (10 years in).. Every once and a while I re-read a chapter.
I'd definatly get the Code Complete, as other have suggested. Infact read that first.

baash05
I'm reading this book right now! Definitely a good book to learn from - however, if he's truly comfortable with C++ already it may not be detailed enough for him.
Sean
+1  A: 

To get a better understanding of object orientation, spend some time in a Smalltalk. Squeak is a free download. Then read Richard P. Gabriel's Patterns of Software and thereafter his Objects have Failed.

Stephan Eggermont
+1  A: 

Thinking in C++ - Bruce Eckel Symfonia C++ Standard - Jerzy Grębosz

+1  A: 

If you do nothing else, program.

When you are not doing that read about programming and when something strikes you as interesting, go implement something with that knowledge. I've found that this is the only way to really set the principals.

Staying up to date on blogs can be fun, but it is scattered knowledge. It seems to distract more than help. But combined with google and a desire to research something specific can really cough up tons of information. But dont' just subscribe to alot of rss feeds and expect to get better.

I think really studying specific topics helps expand your ability. Research topics that intrigue you, meet people doing things like you (conferences, user groups, irc, facebook, stackoverflow, etc) and above all practice your art.

csexton
+1  A: 

Try out to learn something completely new. Math and philosophy serve well. It lets you to think even more abstractly and flexibly. Abstraction and flexibility in thinking, ability to jump through many complex objects easily, are actually the only things that matter in programming.

maurycy
A: 

You can check out the Boost library and a number of the books written about it. While this may not have been what you had in mind, IMO, the Boost libraries are examples of well-designed modern C++ libraries that use the features of the language in pretty much the way they should be used to create among the most effective solutions for their problem domain. Granted of course, there are bizarre libraries like preprocessor and MPL which make you wonder if you'll ever have any use for them, but they're all round quite good. From my own experience, exploring the library and its literature has given me insight into how C++ can be used effectively.

Boost Beyond the C++ Standard Library: An Introduction to Boost

blwy10