These are some of the books I recommended, and some other books that may be worth reading. This list is far from being complete, and will never be. It is biased after my own tastes. It is also far from finished.

  1. The Mythical Man-Month, essays on software engineering, by Frederick P. Brooks Jr.

    This is a classic! Frd Brooks was one of the first to spot the problems software projects suffer from. It is short, sweet, and a MUST READ.

  2. Design Patterns,Elements of Reusable Object-Oriented Software, by Gamma,Helm,Johnson, and Vlissides.

    This is a cult book on OOD. It makes an interesting read. Examples of topics: how to design iterators, how to implement undo etc. You can read more on this book and design patterns in general by following the links about patters in the links page.

  3. Programming Pearls, by Jon Bentley and More Programming Pearls, Confessions of a Coder, by Jon Bentley

    These books deal with software from the point of view of the programmer. They discuss such issues as: problem solving, writing efficient and correct programs, and intersting techniques and tricks. The books are collection of short essays, each studiyng one topic.

    The original Programming Pearls book now has a new edition, which has a web page.

  4. The Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman with Julie Sussman.

    This is a one of the classic books about computers and programming. It is almost the bible for some people. This book is used in MIT to teach programming, and does a great job teaching about "abstraction." Only drawback, for some people, is that it uses the language Scheme. Highly recommended.

    Check the book's web site or check the comp.lang.scheme newsgroup which has discussions about the book occasionaly.

  5. The Evolution of C++,Language Design in the Market Place of Ideas, edited by Jim Waldo.

    This books describes various debates that infulenced the design of C++. Of special importance to students of the Ada course are the chapters about excpetions and about multiple inheritance.

  6. Advanced C++,Programming Styles and Idioms, by James O. Coplien.

    One of the few C++ books that teach you more than syntax. This book covers a variety of approaches to programming - and discusses when are they useful. Some of the topics discussed are of special interest for students of OUP20271, for example subtyping and inheritance, abstract data types and inheritance contrasted with templates. Recommended especially for students with good C++ background.

  7. Understanding Programming Languages,by M. Ben-Ari.

    This book describes programming from the most simple concepts (variables, expressions) to the most complex (polymorphism, exceptions, concurrency). It is not a text book on these topics, but it does give the essential information. It gives examples in both C++ and Ada, thus providing a good starting point for comparing the languages. It also touches many of the important topics of softare engineering like abstraction, modularity etc.

  8. Bringing Design to Software,edited by Terry Winograd.

    Programmers tend to forget that there is a user, who has to be able to use the computer system effectively. This books studies how to design the humam-computer interface. It has some cool ideas.

  9. Microsoft Secrets,How the World's Most Powerful Software Company Creates Technology, Shapes Markets, and Manages People, by Michael A. Cusumano and Richard W. Selby.

    Deals with many interesting topics including management, development, and marketting. It is interesting to read this in sync with other Microsoft-Inside boks (some references will be added later). It will be interesting to see how things will change after the Microsoft trial really ends (i.e., when we know the implications).

  10. Where Wizards Stay Up Late,The Origins of the Internet, by Katie Hafner and Matthew Lyon

    Aside from being a good read, and an interesting history this book provides an example case study of the design and evolution of a computer system. The Interent grew up to be a robust system (even if not 100% reliable), by an evolutionary process. These are two elements that people tend to forget when thinking of software design.

SUGGESTIONS FOR OTHER BOOKS ARE MORE THAN WELCOME!

Last update: 18/04/2000