* David Hanson: C Interfaces and Implementations
* David Hanson: A Retargetable C Compiler
* John Lakos: Large-Scale C++ Software Design
* VA: Beautiful {Code, Data, Testing}
* Design pattern books maybe
* Code Complete
* Fred Brooks: The Mythical Man Month
* Fred Brooks: Design of Design
* "Best of" books like C++ Pearls or More C++ Pearls
* Michael Abrash: Grapics Programming Black Book
* Looking at John Carmack code, eg. in my github repo at http://github.com/mtrencseni
* In the old days they had trade magazines, which unfortunately gave way to blogs. If you're interested in C/C++, there was The C/C++ User's Journal, if you ask them they'll just send you a free DVD with all the issues, and there was the C++ Report
There are many aspects to maintaining a good project:
* knowing your tools; if you use Makefiles/svn/make/gcc/Visual Studio, buy a book on it, write some helper scripts, etc.
* knowing a comfortable subset of your language; pick 2 (at most 3) languages and be good at those, really good at one
* know the idioms of your language and framework(s)
* physical layout: putting code and resources into folders, files, including, naming, etc. in a consistent manner; eg. this is covered in Large Scale C++
* consistent naming and commenting: your code should be pleasant to look at in terms of naming, declarations, length of blocks, tabulation, etc., eg. look at John Carmack code
* DRY, KISS, etc.
* logical design, distributing code and functionality across your program: that's the tough one. Personally I don't find DPs to be generally useful; instead:
* constant refactoring: your motto wrt. refactoring must be "no fear", and you have to set aside time for this. eg. I spend weeks refactoring
* when writing a program, don't start hacking away to get something out the door, think it over, get to know your subject, flesh out its details (eg. read up on it, how have others solved it), so you can appreciate its beauties and difficulties, and if possible
* copy your predecessor's successful ideas and designs
* build yourself a nice 'lib' that you reuse and grow across your projects, but be careful not to turn it into a monster =)
* trick: you can distribute some of these among team members, eg. see the chapter on the Surgical Team in Mythical Man Month, which I subscribe to