Book recommendations

These are books I've read and strongly recommend to everybody. Books that I've read but don't recommend are not here...


Assembly

'The Art of Assembly Language' by Randall Hyde

This book is available free on the net. It's really good and even if you will never write a single line of assembly code, it's helpful to understand what's really going on when high-level techniques are used. Also, I've found myself in situations (like compiler's too aggressive optimization) where just looking at the assembly output allowed me to find and solve a couple of problems. In my opinion, this kind of knowledge is indispensable in the programming business.


C and C++

'Inside the C++ Object Model' by Stanley B. Lippman

Someone could say, that he doesn't need to know how the polymorphism or multiple inheritance looks in its internals, but it's not true. It's essential. Really. This book is not very fresh, but the implementation techniques presented there are used in a broad range of compilers. It's a Good Thing to have at least the idea how objects work.

'Effective C++', 'More Effective C++' and 'Effective STL', all by Scott Meyers

Obligatory. Scott has his own way of writing, which allows me to read his texts without even blinking. His books are highly esteemed in the community and this guy is one of the biggest authorities in the field.

'Large Scale C++ Software Design' by John Lakos

Well, it's the first book I've seen, which is more about the physical than the logical design of the program. And that's why it's also obligatory.

'Generic Programming and the STL' by Matthew H. Austern

Very good introduction to what is generic programming all about and also very good reference to the STL (a little biased towards the SGI's implementation, but it doesn't hurt).

'Exceptional C++', 'More Exceptional C++' and 'Exceptional C++ Style' by Herb Sutter

Both C++ and the books are exceptional. These books have similar layout as books written by Scott Meyers - they are divided into many small items, each complete in itself. It helps when faced with concrete problems.

'Modern C++ Design' by Andrei Alexandrescu

It was quite a hot topic on the comp.lang.c++.moderated, because of the fresh, cool way the advanced language features are used there in developing design patterns. Not for dummies, though. This book requires from the reader some deeper background, but is really enlightening.

'C++ Templates: The Complete Guide' by David Vandevoorde and Nicolai M. Josuttis

A very good work about templates: all from theory to techniques.

'Standard C++ IOStreams and Locales' by Angelika Langer and Klaus Kreft

Probably the best description of the IOStreams library. In addition, the problem of internationalization with the concept of locales is presented in the easy to understand way.

'Generative Programming' by Krzysztof Czarnecki and Ulrich W. Eisenecker

A very interesting introduction and description of the whole family of generative methods (feature-oriented, component-oriented, aspect-oriented and more) with advanced metacode examples in C++.

'ISO IEC 14882-1998' (this is a little cryptic formal name for the ANSI C++ Standard)

Obligatory? On some level, yes.


Ada

'Programming in Ada 2005' by John Barnes

The fundamental book for those who want to learn Ada.

'Concurrency in Ada' by Alan Burns and Andy Wellings

A very nice explanation of all the details of Ada concurrency support. Good reading even for those who don't use Ada - at least to get a perspective on concurrent programming in a wider context.

'High Integrity Software. The SPARK Approach to Safety and Security' by John Barnes

Interesting description of SPARK, which is a language designed for high integrity software and based on core elements of Ada.


Object-Oriented

'Object-Oriented Methods' by Ian Graham

Very good coverage of the OO. This book does not have a single line of code - instead, it focuses on the methods and tools used in the business with discussion of their advantages as well as problems. This book is more an overview than a manual, but very instructive anyway.

'Fundamentals of Object-Oriented Design in UML' by Meilir Page-Jones

This book presents only part of the UML, but it gives a very good introduction (as well as some more advanced concepts) to the principles of OOD. It's also a pleasure to read thanks to the almost entertaining language. Strongly recommended.

'Design Patterns' by Gang of Four (Gamma, Helm, Johnson, Vlissides)

The best book devoted to design patterns I've ever seen and heard of (others share this opinion) - I've learned a lot from the way authors solve their problems. The book is easy to understand (although some experience is required) and leaves the reader with the sensation of complete enlightenment. Really.

'The UML User Guide' by Grady Booch, James Rumbaugh, Ivar Jacobson

This is exactly what the title says. Easy language, lots of diagrams.

'Designing Concurrent, Distributed and Real-Time Applications with UML' by Hassan Gomaa

Well composed and with lots of information not only about UML itself, but also about distributed systems and how they influence the modeling.


Databases and Conceptual Modeling

'An Introduction to Database Systems' by C. J. Date

This is the classical position, highly recommended before reading anything else.

'Information Modeling and Relational Databases' by Terry Halpin

A very good coverage of the Object Role Modeling.


Unix

'Advanced Programming in the UNIX Environment' by W. Richard Stevens

It was written many years ago, but is still up to date, thanks to the fact that Unix API hasn't changed considerably from that time.

'UNIX Network Programming' by same author, two parts

I cannot find words which could properly describe this book. It's just the best in the field.

'Programming with POSIX Threads' by David R. Butenhof

Really good coverage of everything (I think) that has something to do with threads. I recommend this book also to Windows programmers, since the issues in thread programming overlap in the Windows and Unix environments, even if actual APIs differ.

'The Art of UNIX Programming' by Eric S. Raymond

This book is not about "how", but about "why". There is no code inside, but instead a clear explanation of the Unix rationale.


Distributed Systems

'Distributed Systems, Concepts and Design' by Coulouris, Dollimore and Kindberg

A very good introduction to... distributed systems. Quite instructive.

'Advanced CORBA Programming with C++' by Henning and Vinoski

It's not for the beginners (the title says it clearly. I've seen lots of books with advanced somewhere in the title, but it was just to look better - not this time) and I had to read some parts twice (and I'm not sure if I got it correctly even then...), but it's that book that made me interested in object oriented, distributed technologies. The book and its authors are highly esteemed in the CORBA community.


Real-Time

'Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems' by Bruce Powel Douglass

Comprehensive catalog of standard solutions for different aspects of real-time systems. Each design pattern is described in an involving and interesting way.


Tcl/Tk

'Tcl and the Tk Toolkit' by John K. Ousterhout

Very good book written by the initial Tcl designer. The book does not explain the most recent language bells and whistles, but is excellent anyway and provides good introduction to the Tcl C interface. It has helped me a lot.

'Practical Programming in Tcl and Tk' by Brent B. Welch

It's targeted at people looking for practical advises and is much more recent than the previous book, but I like it less (less low-level details?). I recommend it to Tcl-focused programmers, but if you are rather interested in C interfacing, go buy the first one.

'Effective Tcl/Tk Programming' by Mark Harrison and Michael McLennan

This book starts where the other two stop, exactly as advertised. A lot of important techniques used in real applications, clearly explained.