The list of books on this page is a small selection from the many
that I have found useful over the last few years for one reason or
another. There are many other excellent books out there, and more will
probably be added to this list as time permits. Each book mentioned is
accompanied by a short comment, which you may take to heart, or with
the appropriate grain of salt.
- Chew, Frederick F: The Java/C++ Cross-Reference
Handbook, Prentice-Hall, 1998. A good reference to have on your
shelf if you need to look up some point of comparison between the two
languages. Claims to provide "Techniques that you already know
that'll keep working with little or no change", "Subtle but critical
differences between C++ and Java", and "Habits that you'd better
'unlearn' fast".
- Dale N, Weems C, and Headington M: Programming and Problem
Solving with C++, Third Edition, Jones and Bartlett, 2002. The
first edition of this text was the one used for the first two years
of C++ in the introductory programming course at Saint Mary's
University in Halifax, NS. It proved to be an excellent choice. The
book is well written, with clear explanations and lots of examples,
problems and case studies. It was also remarkably typo and error
free. Later editions have been scaled down somewhat (with fewer long
case studies, for example) but it remains one of the best
introductory texts on the market.
- Deitel HM and Deitel PJ: C++ How to Program, Third
Edition, Prentice Hall, 2001. A very thorough discussion with
lots of good examples. Could be used for a first course but probably
only if the class consisted of all keeners. (There must be a class
like that out there somewhere!) The Deitels are a father-and-son team
who have also written a number of other excellent texts. They teach
to corporate customers, and presumably charge large bucks to do
so.
- Eckel, Bruce: Thinking in C++, Volume I, Second Edition,
Prentice Hall, 2000 and Volume 2, Prentice Hall, 2004. Lots
of good in-depth discussion, often about potentially confusing and
subtle material. A "serious" treatment of the subject, to be sure,
and aimed, in fact, at "serious" developers. It can still be read
with profit by neophytes but it would not be suitable for a first
text for an average class.
- Graham, Neill: Thinking in C++, McGraw-Hill, 1991. An
older book, and some of the content is therefore dated. Nevertheless,
you will be hard pressed to find a better, yet more succinct,
description of some things you may have read about elsewhere, but
that you hadn't quite fully understood just yet. Chapter 8 on I/O is
the best short summary available anywhere that I know of, and even
the description of such everyday matters as scope and linkage is a
cut above the ordinary. Aside from which, I had never heard of
"sequence points" till I read about them (in the discussion of side
effects) on pages 33-35 of this book. Whatever you have to pay to
rescue this one from the bargain bin will be well worth it.
- Josuttis, Nicolai: The C++ Standard Library, Addison
Wesley, 1999. Pretty much anything you want to know about the C++
Standard Library should be in here somewhere, unless what you need
happens to be on page 202. If you buy this book, make sure that page
is not half empty, as it was in my copy.
- Josuttis, Nicolai: Object-Oriented Programming in C++,
John Wiley & Sons, 2003. An excellent overview of its subject,
with true attention paid to the things that need attention when
writing object-oriented programs in C++. However, not a first text
for a beginning student.
- Kernighan B and Ritchie D: The C Programming Language,
Prentice Hall, 1978. Dennis Ritchie was responsible for the C
programming language, from which so much stems, and this book is
the classic volume on the language, albeit a slim one. There
has been a second (and presumably improved) edition, but this is the
one that will cause passersby to whisper to one another in awe if you
are spotted poring through it at Tim Horton's, say.
- Langer A and Kreft K: Standard C++ IOstreams and
Locales, Addison Wesley, 2000. A compendium of detailed
information on a very narrow aspect of C++, but the size of this book
(640 pages) and its narrow scope should give you some idea of the
growing complexity of the language. Like the Josuttis book above,
this is a reference text, one that you go to for that obscure piece
of information that you can't find anywhere else.
- Lischner R: C++ in a Nutshell, O'Reilly, 2003. This
particular "Nutshell" book from O'Reilly seemed to be a long time in
coming, but also seems worth the wait. A very good and extensive
summary of both the language and the libraries in reasonably
acessible form.
- Meyers, Scott: Effective C++, Second Edition, Addison
Wesley, 1998. This is the first of a trilogy of really excellent
reference books by the same author. They are not books that you pick
up to learn C++, but to get the answers to a lot of vexing questions
that every C++ programmer faces sooner or later. Meyers has an
engaging writing style as well, and you won't regret spending money
for your own copies of these books if you plan to be a serious C++
programmer.
- Meyers, Scott: More Effective C++, Addison Wesley, 1996.
The second volume in Meyers' trilogy.
- Meyers, Scott: Effective STL, Addison Wesley, 2001. The
third volume in Meyers' trilogy.
- Plauger PJ and Brodie J: Standard C, Prentice Hall, 1996. An
excellent and complete reference for the C programming language.
Material from this text is also available in hypertext form as one of
the items among our Additional Reference Material.
- Satir G and Brown D: C++: The Core Language, O'Reilly,
1995. Somewhat dated now, but a sentimental favorite since it was one
of the first C++ books I read from cover to cover (almost, at least),
and I learned a lot from it. Refreshingly offbeat here and there, and
the place where I learned the amazing fact that, in C++, if you want
the 6th element of an array a, 5[a] will do just as well as a[5]!
(See the footnote on page 25.) Who'd have thunk it?
- Savitch, Walter: Problem Solving with C++, Third
Edition, Addison Wesley, 2001. The second edition of this text
was used during the third and fourth times C++ was taught at Saint
Mary's and this third edition will be used for the fifth offering. It
is a well written book with good examples, and makes excellent use of
color, as well as arrows to point things out. The second edition was
unfortunately plagued with an inordinate number of errors, both typos
and things that were actually quite wrong. One hopes that the third
edition has eliminated most of these without introducing too many new
ones.
- Schildt, Herbert: STL Programming from the Ground Up,
Osborne/McGraw-Hill, 1999. Of the many STL books now available, and
with more appearing all the time, this is still one of the better
ones for quickly looking up what you need to know. It also has a good
overview of the STL before getting into the details. Schildt has a
number of other books on C and C++ as well, and all are good sources
of useful examples and helpful discussion.
- Stroustrup, Bjarne: The C++ Programming Language, Special
Edition, Addison Wesley, 2000. This of course is the definitive
volume by the actual and spiritual Father of C++. Although clearly
written and to the point, it is not for the faint of heart or short
of time. Still, it should be on every C++ programmer's bookshelf
sooner or later. Among other things, you don't have to read very far
to appreciate the thought and care that went into the development of
the C++ programming language. It was, and continues to be, a labor of
love for Stroustrup. We should all be grateful.
- Bloch, Joshua: Effective Java, Addison Wesley, 2001. A
book in the spirit of Scott Meyers' "Effective ... " trilogy of C++
books (see above), and which, like the book by Haggar (see below),
provides a list of "items" that discuss tricky and subtle points that
careful programmers will find useful and/or interesting.
- Budd, Timothy: Understanding Object-Oriented Programming with
Java, Updated Edition, Addison Wesley, 2000. This book
(previously as a text for the CSC 465 course at Saint Mary's)
contains some useful discussions of object-oriented concepts, but
does not place all of them into an up-to-date context, such as the
UML. Also, it assumes more than it teaches about Java.
- Chew, Frederick F: The Java/C++ Cross-Reference
Handbook, Prentice-Hall, 1998. A good reference to have on your
shelf if you need to look up some point of comparison between the two
languages. Claims to provide "Techniques that you already know
that'll keep working with little or no change", "Subtle but critical
differences between C++ and Java", and "Habits that you'd better
'unlearn' fast".
- Cooper, James W: Java Design Patterns, Addison Wesley,
2000. A good introduction to the topic, within a Java context. The
author claims it's "a tutorial for people who want to learn what
design patterns are about and how to use them in their work".
- Dale N, Weems C and Headington M: Introduction to Java and
Software Design, Jones and Bartlett, 2001. The hallmark of any
book of which Nell Dale is author or co-author is clear explanation
of central concepts with good, relevant examples, and this text is no
exception. Not as error-free as some of her earlier efforts, but
excellent nonetheless. It's an intro-level treatment, but if you're
wondering about something at that level and the book you're using
doesn't quite explain it to your satisfaction, try Dale.
- Darwin, Ian F: Java Cookbook, O'Reilly, 2001. A useful
book to have on your shelf either for occasional browsing, or
possibly looking up how to perform a particular task when you can't
seem to find out how to do it anywhere else.
- Deitel HM and Deitel PJ: Java How to Program, Fourth
Edition, Prentice Hall, 2002. This is the Java version of the
Deitel approach to programming, with their "live-code" examples and
broad coverage. Always a force to be reckoned with, the Deitels
provide lots of good examples and broad coverage.
- Eckel, Bruce: Thinking in Java, 2nd Edition, Prentice
Hall, 2000. Once again, as he did with C++, Eckel provides an
in-depth discussion of many points not mentioned at all, or glossed
over, by other authors. Deserves a place on any Java programmer's
bookshelf.
- Flanagan, David: Java in a Nutshell, Fourth Edition,
O'Reilly, 2002. The various editions of this book (1996, 1997, 1999
and now 2002) have to some extent captured Java in its own various
stages of development. Still a very handy guide to the language,
though the language has now expanded to the point where the book can
no longer contain it all (hence the additional Java Foundation
Classes, and Java Examples companion volumes, for
example, among others, also published by O'Reilly).
- Haggar, Peter: Practical Java, Addison Wesley, 2000.
Another book in the spirit of Scott Meyers' "Effective ... " trilogy
of C++ books (see above), and which, like the book by Bloch (also see
above), provides another list of "items" that discuss tricky and
subtle points for careful programmers (those elusive creatures).
- Holmes, Barry: Programming with Java, Jones and
Bartlett, 1998. This text has gone into at least a second edition,
but I prefer the original, which dealt directly with the Java I/O
"problem". Many Java texts tend to want to deal with Java I/O with
"home grown" solutions that, naturally, will differ from author to
author, and unfortunately this text succumbed to this "problem" the
second time around.
- Horstman, Cay S and Cornell, Gary: Core Java 2 (Volume I)
Fundamentals (1999)and Core Java 2 (Volume II) Advanced
Features (2000), Prentice Hall. These two books contain a wealth
of useful information, with lots of examples and discussion.
- Jia, Xiaoping: Object-Oriented Software Development Using
Java, Second Edition, Addiosn-Wesley, 2003. Jia has a nice blend
of Java and higher-level OO material. He writes clearly and
summarizes the key issues nicely. Provides in introduction to UML and
design patterns as well, and also contains a brief mention of both
unit testing with JUnit and building projects Ant. This book is a
strong contender to replace Eckel as a textbook for CSC 465 the
second time around. (But you should still have a copy of Eckel!)
- Niemeyer, Patrick and Knudsen, Jonathan: Learning Java, 2nd
Edition, O'Reilly, 2002. This appears to be a well written and
reasonably comprehensive introduction to the language, and contains
some topics you don't find everywhere, such as regular expressions
and some material on how to deal with images and sound.
- Wang, Paul S.: Java with Object-Oriented Programming,
Thomson (Brooks/Cole), 2003. Another good text combining both Java
and OOP principles, though assumming more of the reader by way of
knowledge of basic Java than, say, the text by Jia does. If students
had some prior exposure to Java, this would be a strong contender for
the same kind of course for which Jia might be a better choice if
that were not the case.
- Beck, Kent: eXtreme Programming eXplained, Addison
Wesley, 2000. This is an introductory overview of the subject by one
of the chief architects and proponents of the approach it
describes.
- Bellin, David and Simone, Susan Suchman: The CRC Card
Book, Addison Wesley, 1997. The use of "CRC cards" (Class,
Responsibility and Collaboration) as an informal part of the
object-oriented software development process is well established. Is
it worth a whole text? Obviously these authors think so.
- Booch, Grady: Object-Oriented Analysis and Design with
Applications, Second Edition, Addison Wesley, 1994. The first
edition of this text apparently helped put object-oriented software
technology on a practical footing. Certainly Booch is regarded as one
of the gurus of object-oriented software development, and your
library should not be too large before it contains a copy of this
one.
- Fowler, Martin w. Scott, Kendall: UML Distilled, Second
Edition, Addison Wesley, 2000. This is a good introductory
overview of, and concise guide to, the Unified Modeling Language.
Either this or the Scott book (mentioned below) can serve as a quick
introduction to UML.
- Gamm E, Helm R, Johnson R and Vlissides J: Design
Patterns, Addison Wesley, 1995. These authors are often referred
to as the "Gang of Four" (GoF), and this book is generally regarded
as the seminal work in the area. It catalogs 23 of the most
fundamental design patterns of frequent use to software
developers.
- Knuth, Donald: Fundamental Algorithms, Third Edition,
Addison Wesley, 1997; Seminumerical Algorithms, Third
Edition, Addison Wesley, 1998; Sorting and Searching, Second
Edition, Addison Wesley, 1998. These are the first three volumes
in Knuth's The Art of Computer Programming series, generally
regarded as one of the most important reference works in all of
computer science, and one of the key publications in any field that
came out during the 20th century. Every serious computing science
student should have these books on his or her shelf. After a hiatus
of many years, during which he produced, among other things, the TeX
document preparation system and associated software, Knuth is
apparently back at work on succeeding volumes in this series, which
have long been promised, and which are eagerly anticipated by the
computing community.
- Kruchten, Philippe: The Rational Unified Process An
Introduction, Addison Wesley, 1999. A good match for an
introductory text on the UML, such as the one by Fowler and Scott
(above) or the one by Scott (below). The "Rational Unified Process"
is one approach to software development developed at Rational
Software and widely used in the industry. When combined with the UML
for modeling the structure of a software system, it provides a
disciplined approach to assigning, managing and completing tasks
within a software development organization.
- Lethbridge, Timothy C and Laganiere, Robert: Object-Oriented
Software Engineering, McGraw Hill, 2001. A good discussion of
the subject, with just enough history to make the history interesting
and enough other stuff to be useful.
- Riel, Arthur J: Object-Oriented Design Heuristics,
Addison Wesley, 1996. This is an excellent book for both study and
browsing, offering helpful advice and examples on all manner of
topics relating to the design of object-oriented systems. It attempts
to provide a list of guidelines to help you decide whether your
object-oriented design is "good, bad, or somewhere in between".
- Scott, Kendall: UML Explained, Addison Wesley, 2001.
This is a later book by the second author of the Fowler book, UML
Distilled, listed above. It too is an elementary introduction to
the subject, which claims to be approachable, non-technical, and to
assume no prior knowledge of the subject. Either this or the Fowler
book can serve as a quick introduction to UML.
- Si Alhir, Sinan: UML in a Nutshell, O'Reilly, 1998. An
excellent UML reference, with a better discussion than many books of
the "meta-concepts" and "meta-notation" involved in the UML.
- Sintes, Anthony: Teach Yourself Object Oriented Programming
in 21 Days, SAMS, 2002. As with all of these books with similar
titles, the promise may be a little overblown, but this one is not
bad, nevertheless, with some good examples and just enough detail on
many topics to give a pretty good overview. Java is the language of
choice.
- Skiena, Steven S.: The Algorithm Design Manual, Springer
Telos, 1998. This book is equally excellent for browsing, self-study,
or reference. It has a wealth of information, is well written, and
comes with a CD containing many algorithm implementations in C, C++,
FORTRAN and Pascal.
- Steinberg, Daniel H. and Palmer, Daniel W.: Extreme Software
Engineering A Hands-On Approach, Prentice Hall, 2004. One of the
first texts to take an explicit eXtreme Programming approach to
software engineering.