Let's Adore Jesus-Eucharist! | Home >> Varia >> Software Engineering
2) General comments on computer science books
3) General Software Engineering
4) Geeky C++ Books
5) More specialized books
6) Some bad Software Engineering books
Here are, in my opinion, some good Software Engineering books (please tell me if you know of better ones!). I tried to sort them in decreasing order of importance. In other words, if you're going to be stuck on a desert island, pack your liferaft starting with the top of this list!
Also, beware of editions! Normally, you should get the latest one. See also Section 3.6 of How To Choose A Good Book for publishers to avoid, as well as the above-mentioned list of bad books.
Code Complete, 2nd Ed.
McCONNELL, Steve. Microsoft Press, 2004.
Excellent book. The author explains how to program (how to code, comment, debug, how to improve as a programmer, etc.). It's an inspiring book, and its author has transformed and continues to transform the landscape of Software Engineering.
He might be a bit weak when he talks about object-oriented design, and his code samples smell a bit of "COBOL payroll", but all in all those are minor downsides.
The C++ Programming Language, 4th ed.
STROUSTRUP, Bjarne. Addison-Wesley, 2014.
This is THE C++ book, undoubtedly. This book is heavy, expensive, and hard to read, but it replaces several lousy books on C++ and object-oriented programming (which I ended up throwing away). Moreover, the author manages to almost completely avoid: (i) making negative comments about other programming languages; (ii) presenting his language as the Savior of the World; and (iii) trying to sell us something (three qualities unfortunately very rare in such kind of book). An excellent investment.
Downsides: Verity Stob's comment about "C cruft-cruft" is ringing truer as years go by and more features get duck-taped on. Also, the author is probably an Atheist, which shows in his top-of-chapter quotes, but also in his high comfort level when surrounded by ambiguity, confusion and purposelessness. A Christian faced with the same programming language would want to introduce light and order, at least in another programming language, so he could then say: "If we had a clean slate, we would introduce this new feature thusly, but since we have to remain backward-compatible, we did it like this in C++", etc.
Object-Oriented Analysis and Design, with applications, 3rd Ed.
BOOCH, Grady, et al. Addison-Wesley, 2007.
Excellent introduction to all things object-oriented. The author is one of the three inventors of the UML notation, and one of the inventors of object-oriented design. The organization of the book in three parts is excellent: first the concepts (what is a system? an object? etc.), then notation (UML 2.0), and finally EXAMPLES of architectures.
Cons: I think this book could be written in plainer English, with less object-oriented hype.
Structured Computer Organization, 6th Ed.
TANENBAUM, Andrew S. Pearson, 2013.
What an enjoyable author! He's funny, concise, clear. This book explains how a computer works, from the lowest levels (near the transistors) to the highest (near the actual applications running on the computer).
Modern Operating Systems, 4th Ed.
TANENBAUM, Andrew S. Prentice Hall, 2014.
Another book on operating systems by Tanenbaum, but more theoretical. I haven't read all textbooks on operating systems, but this one seems one of the better ones.
Computer Networks, 5th Ed.
TANENBAUM, Andrew S. Pearson/Prentice Hall, 2011.
Excellent introductory textbook on networks.
Software Project Survival Guide
McCONNELL, Steve. Microsoft Press, 1998.
If you must have only one book on software project management, this is it! Short, filled with good information, practical.
Rapid Development; Taming Wild Software Schedules
McCONNELL, Steve. Microsoft Press, 1996.
If you're a student, you might not understand the rationale behind this book. If you're working as a programmer, this book can save you! The life of a programmer is a constant struggle to avoid missing deadlines. This book explains how to reduce the probability of delays in the schedule.
Distributed Systems: Principles and Paradigms
TANENBAUM, Andrew S. Prentice Hall, 2002. (2nd ed., 2006, is available)
Apparently, a reasonable introduction to distributed systems.
Professional Software Development: Shorter Schedules, Higher Quality
Products, More Successful Projects, Enhanced Careers
McCONNELL, Steve. Pearson Education, 2004.
McCONNELL defends the necessity for programmers to better educate themselves, to follow software engineering courses (and not Computer Science), and to be members of a professional association, etc.
Operating Systems; Design and Implementation, 2nd Ed.
TANENBAUM, Andrew S. Prentice Hall, 1997. (3rd Ed., 2006, is available)
A book on operating systems in general, and Minix in particular (the ancestor of Linux). Source code, CD-ROM, etc. The information on operating systems seems quite all right.
Cons: I have serious reservations on the Minix source code. I don't want to trash-talk this excellent author. It's more a complaint about the general "C Universe", programs coded in C, un-object-oriented, and not documented with UML. Many persons (and companies!) code like this, but that's bad. The same operating system, well coded in C++, with a good documentation in UML, would be far easier to understand. If Linux had been based on such a "Modern Minix", Microsoft might have been killed a long time ago.
An Embedded Software Primer
Simon, David E. Addison-Wesley, 1999.
A good little primer on embedded systems. Necessary in the education of a programmer. But it's really a primer for programmers. If you're more of a "hardware" type, this book will be too simple for you.
Doing Hard Time; Developing Real-Time Systems with UML, Objects, Frameworks
DOUGLASS, Bruce Powel. Addison-Wesley, 1999.
With such a title, the book must be thick! And it is, and it's also good! Mr. Douglass is funny, competent, and he clearly explains real-time systems.
Fundamentals of Database Systems, 6th Ed.
ELMASRI, Ramez, NAVATHE, Shamkant B. Addison-Wesley, 2011.
A thick introductory textbook on databases. Too much formalism and not enough source code for my taste, but it seems to cover at least a bit everything related to the subject.
Designing the User Interface, 3rd Ed.
SHNEIDERMAN, Ben. Addison-Wesley, 1998. (4th ed., 2004, is available)
A reference book on user interfaces. I'd like to have a better one to suggest.
BENTLY, Jon. Addison-Wesley, 1989.
More Programming Pearls; Confessions of a coder
BENTLY, Jon. Addison-Wesley, 1990.
Two small books gathering articles written by Mr. Bently and appearing in the "Communications of the ACM" magazine. He is funny, intelligent, and presents real-life programming problems, as well as their solutions. Not essential, but good for your culture! I also like his chapter on "Bumper-Sticker Computer Science", with proverbs like "When in doubt, use brute force!" :-)
Principles of Software Engineering Management
GILB, Tom. Addison-Wesley, 1988.
A bit old, but still very good, concerning the essentials of project management. The author is interesting to read, and he gives good advice.
The Mythical Man-Month, Anniversary Edition
BROOKS, Frederick P. Addison-Wesley, 1995.
Not an essential book, but if you've got the budget, it's interesting. Mr. Brooks managed the OS 360 project for IBM, back in the days of Abraham and Moses. But he is a good thinker, and on top of that, he writes well. Many of his comments (on project managment and on software development tools) are still valid today.
Object Solutions; Managing the Object-Oriented Project
BOOCH, Grady. Addison-Wesley, 1996.
Several essays on the management of object-oriented projects, by a guy who has managed such projects! The book is a bit dated. Not essential, but still good.
The Unified Modeling Language (UML) User Guide, 2nd Ed.
BOOCH, Grady, RUMBAUGH, James, JACOBSON, Ivar. Addison-Wesley, 2005.
UML is used to develop software systems, and all programmers must know this language. There are all kinds of books out there on UML. The following two are far from perfect, but at least they are written by the guys who invented UML.
Downside for this one: Appallingly verbose, and filled with Grady's typical writing style: strangely concrete words to talk about abstract things ("capturing" requirements, "crisp" concepts, etc.), mixed with excessively abstract words to talk about rather concrete things (like an "artifact" for a DLL or EXE, etc.). The book could be a fraction of the current size. I would have preferred a half-dozen examples of software systems modeled with UML, from the simple to the complex.
The Unified Modeling Language (UML) Reference Guide
BOOCH, Grady, RUMBAUGH, James, JACOBSON, Ivar. Addison-Wesley, 1999. (see preceding comment on new edition )
The Unified Software Development Process
BOOCH, Grady, RUMBAUGH, James, JACOBSON, Ivar. Addison-Wesley, 1999.
The UML notation can be used with any development method. The Three Amigos present their development method here. OK. Well, yes. No development method is perfect. Their's is probably one of the better ones. Also known as RUP (Rational Unified Process)
Design Patterns; Elements of Reusable Object-Oriented Software
GAMMA, Erich, HELM, Richard, JOHNSON, Ralph, VLISSIDES, John M. Addison-Wesley, 1994.
I don't agree with many things in this book, and the patters listed are too limited in my opinion, but this is the book that "started the ball rolling" on software patterns (i.e. "large chunks of software architecture solutions" that can be re-used from one project to the next). A programmer should read this book at least once.
Effective C++, 2nd Ed.
MEYERS, Scott. Addison-Wesley, 1998.
More Effective C++
MEYERS, Scott. Addison-Wesley, 1996.
Two good books that will be appreciated by C++ geeks. He gives all kinds of advice for C++ programmers.
Large-Scale C++ Software Design
LAKOS, John. Addison-Wesley, 1996.
The author explains how to develop large C++ systems, and gives lots of good advice (and other advice which is now dated because of the ANSI/ISO version of C++). But his most remarkable contribution is his explanation of the physical architecture of systems (the organization of files, modules, the compiling and testing process, etc.).
The Design and Evolution of C++
STROUSTRUP, Bjarne. Addison-Wesley, 1994.
Reads like a novel! Bjarne explains how he invented this important language. The second half of the book is now obsolete. Nevertheless, this book is important to understand why C++ is the way it is, and why Bjarne could have invented the equivalent of Java, but didn't do it for very good reasons.
Artificial Intelligence, A Modern Approach, 2nd Ed.
RUSSELL, Stuart, NORVIG, Peter. Pearson Education, 2003.
Seems like a good introductory textbook on the topic.
Numerical Recipes in C, 2nd Edition
PRESS, William H., FLANNERY, Brian P., TEUKOLSKY, Saul A., VETTERLING, William T. 1992. (a C++ edition, 2002, is available)
Introduction to algorithms
CORMEN, Thomas H., LEISERSON, Charles E., RIVEST, Ronald L. McGraw Hill, 1990. (2nd ed., 2001, is available)
I wish I could say I understand such books!
3D Computer Graphics, 2nd Edition
WATT, Alan. Addison-Wesley, 1993.
Apparently, a good introduction to the topic. My math is too weak to really understand.
Concepts of Programming Languages, 4th Edition
SEBESTA, Robert W. Addison-Wesley, 1999. (8th ed., 2007, is available)
I find it uninspired, but a programmer needs at least one book on that topic.
Compilers; Principles, Techniques and Tools, 2nd Edition
AHO, Alfred V., LAM, Monica S., SETHI, Ravi, ULLMAN, Jeffrey D. Addison-Wesley, 2006.
I wish I knew a better book about compilers... (Not just because this one has many typos, especially given the very high price, large number of authors, and the fact it's not a first edition.) I'd like a compiler book that:
- Explains all the essential theory (most existing books satisfy that criteria).
- Gives full source code to build a compiler for a modern general-purpose systems programming language (including exception handling, templates, operator overloading, virtual functions, etc.).
- Has high quality, "Steve McCONNELLl Grade", source code (not the typical garbage that would get a failing grade if you were a first year, first semester software engineering student).
- Has a proper object-oriented architecture for the compiler, and UML documentation.
The Psychology of Computer Programming
WEINBERG, Gerald M. Dorset House, 1998.
GILB, Tom, GRAHAM, Dorothy. Addison-Wesley, 1993.
Applied Cryptography, 2nd Edition.
SCHNEIER, Bruce. John Wiley and Sons, 1996.
ADRIAANS, Pieter, ZANTINGE, Dolf. Addison-Wesley, 1996.
Compiler Design in C
HOLUB, Allen I. Prentice Hall, 1990.
One of the least bad books on compilers that I've been able to find. It presents the theory, but also all of the source code to compile a subset of C into a kind of home-rolled assembler (among others by using his own version of "lex" and "yacc").
Disadvantages: If it had been published in 1975, this would have been the book of a genius. But in 1990, C++ and object-oriented programming were well known. The source code stinks. Sad, very sad.
See Section 6 of Some Bad Books.
Let's Adore Jesus-Eucharist! | Home >> Varia >> Software Engineering