jfas.de > axel > favourite books

Axel Schairer's Favourite Books

These are non-fiction books that I can recommend. As a criterion, I would buy them again in case I should loose them.

Programming and Software Design

Peter Seibel. Practical Common Lisp. If you know all about Java and want to be taken to Common Lisp from someone who knows his Java well then this book is for you. The book is also recommended for CL beginners without a Java background. Fairly comprehensive, but also fairly thick.

Paul Graham. ANSI Common Lisp. If you want to start with Common Lisp, I would recommend either Graham's ANSI Common Lisp or Seibel's book above. Graham is briefer and considerably less dense.

Paul Graham. On Lisp. If you need to write macros you will want to look into this book at some point in time. It predates ANSI CL but is still worth the time.

Peter Norvig. Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp. This one is also known as PAIP. Forget about the artificial intelligence if you feel intimidated or alienated, and take it as what it is: a convincing argument that CL is an incredibly powerful general purpose programming language, in particular for solving problems that are hard to solve. It also covers a lot of ground on domain-specific languages and applied compiler technology.

Kernighan and Ritchie. The C Programming Language. 2nd Edition. Still my choice for learning C. Be aware that ANSI C is defined differently in subtle ways, so check with the relevant standard(s) whenever it matters and you are not sure the difference will be caught by your assertions and tests anyway.

Kernighman and Plauger. The Elements of Programming Style, 2nd edition, McGraw-Hill, 1978 The authors provide examples in both programming languages: Fortran and PL/I. Seriously, in the preface to the 1974 edition they claim that their observations are also relevant for other programming languages of the time, including assembly. What astonishes me, though, is how much of their observations are still relevant today, more than 30 years later. In particular the chapter on "Efficiency and Instrumentation" should be required reading by anyone writing any code.

Andrew Koenig and Barbara E. Moo. Accelerated C++: Practical Programming by Example. Addison Wesley, 2000. Very good tutorial to idiomatic C++. This finally gave me the starting point from which to go to the references. I guess this book is also suitable for novices to get into the idea of using and providing abstractions. For instance, the authors unobtrusively introduce the idea of loop invariants. (They also explain recursion, thusly: "Evidently, the key to understanding recursion is to begin by understanding recursion. The rest is easy." I tend to agree.)

Barbara Liskov. Program Development in Java - Abstraction: Specification, and Object-Oriented Design. Addison Wesley, 2001. Invaluable as both a very good tutorial to Java (as a serious programming language, not as a graphical user interface building tool) and as an introduction to abstractions and specification, as the title implies. The book is quite expensive. I had to buy it twice (still wonder whom I lent the first copy) but would buy it a third time if necessary.

Abelson and Sussman. Structure and Interpretation of Computer Programs , 2nd edition, MIT Press, 1996. Goes through the computational paradigms, starting with Scheme. Explains procedural abstraction, data abstraction, modularity, objects, state, metalinguistic abstraction, and register machines. This is a must for everyone. Either you know what they say, then you will be delighted by the way in which they say it, or you will learn substantial stuff.

Software Development and Management

Gerald M. Weinberg. Quality Software Engineering, Dorset House, 1991-7. These books have changed my thinking about software development more than any technical book has. As an aside, any other book by Jerry Weinberg was worth reading, more than most other books. So if any of his other books like Secrets of Consulting, Becoming a Technical Leader, Exploring Requirements, An Introduction to General Systems Thinking comes your way, seize the opportunity and read them.

Robert D. Austin. Measuring and Managing Performance in Organizations. Dorset House, 1996. From the foreword by Tom DeMarco and Timothy Lister: "When you measure any indicator of performance, you incur a risk of worsenig that performance. This is what Rob calls dysfunction. [...] You probably understood long ago that dysfunction was a possibility [...] But as Rob pursues the subject [...] it gradually begins to dawn on you that dysfunction is not an exception to the rule; it is the rule [...]" Also, see Joel on Software 2002/07/15.

Tom DeMarco and Timothy Lister. Peopleware, 2nd edition, 1999. I have guessed it all along: people (rather than processes) and the environment really matter. And it has been known as early as 1987.


James Surowiecki. The Wisdom of Crowds, Doubleday, 2003. Groups can be surprisingly successful predicting the future, guessing facts, solving coordination or cooperation problems. Groups sometimes outperform individuals, even experts, in decision making. This only works if people rely on private information, their decisions are independent, and the usual ways of making people conform are somehow taken care of. ("Centralization is not the answer. But aggregation is.")

Robert B. Cialdini. Influence: The Psychology of Persuasion, Quill, William Morrow, 1984. So it's not just me. There are certain behavioural patterns that make people feel obliged to do what others want them to. It feels good to know some of these patterns, just to be able to try and resist.

Last update Sa 30. Aug 00:32:29 CEST 2008 by axel