Bibliography for COS 333, Advanced Programming Techniques

Sat Jan 31 10:14:31 EST 2009

Programmers speak

Here are some online essays and interviews with great programmers that I have found worth reading.

You might also enjoy some of the essays by Joel Spolsky and Paul Graham. Both have written books that include some of these essays and other material. Spolsky is especially interesting, entertaining and on point with many of the topics of this class.

Languages

Languages as their creators see them: Dennis Ritchie (C), Bjarne Stroustrup (C++), James Gosling (Java), Larry Wall (Perl), Guido van Rossum (Python), Anders Hejlsberg (Turbo Pascal, Delphi, C#). Yukihiro ("Matz") Matsumoto (Ruby). There is also a good trio of interviews about the C family, with Ritchie, Stroustrup and Gosling.

The C++ Programming Language (3rd/special edition), Bjarne Stroustrup. The definitive reference by the inventor of the language. Each edition has been significantly bigger than the previous, reflecting growth in the language and more recently in standard libraries. Bjarne's new text Programming: Principles and Practice Using C++ is focused on teaching the language from the ground up.

The Java Programming Language, 4th edition, Ken Arnold, James Gosling. Gosling is the main inventor of Java. The first and second editions were a reasonable introduction to the language but not to much of the vast array of libraries; I have not looked at the third edition. David Flanagan's Java in A Nutshell (5th edition) is a good handbook. Sun Microsystems maintains a large online collection of Java documentation, including tutorials and reference material. Josh Bloch's Effective Java (2nd edition) is an excellent guide to good practice for experienced Java programmers.

Programming Perl, 3rd edition, Larry Wall, Tom Christiansen, Randal L. Schwartz. The definitive reference, though not nearly as clear, organized or crisp as a reference should be.

Python has good online documentation; for books, Python in a Nutshell (2nd edition) by Alex Martelli is perhaps the standard reference. As a reference, I prefer Python Essential Reference (3rd edition) by David Beazley.

For Javascript, David Flanagan's JavaScript: The Definitive Guide (5th edition) is bulky but complete.

(Advertisement.) The C Programming Language, Brian Kernighan, Dennis Ritchie.

(Advertisement.) The AWK Programming Language, Al Aho, Brian Kernighan, Peter Weinberger.

Programming

These are books that I think worth reading, for enrichment or for good practical advice, or both.

The Mythical Man Month, Fred Brooks. The great classic of software engineering, one of the few computer science books that repays frequent reading.

Code Complete, 2nd edition, Steve McConnell. McConnell gives practical advice, clearly derived from real experience, in all his books. Code Complete is for individual programmers. His books on software project management, Rapid Development and Software Project Survival Guide, are also very much worth reading if you ever become involved in any kind of software project. The COS 333 project planning is based in part on ideas derived from these books.

Writing Solid Code, Steve Maguire. This is a good shorter companion for McConnell's Code Complete, also full of good advice.

Programming Pearls, 2nd edition, Jon Bentley. Lots of good insight into how to approach programming tasks, with an emphasis on algorithms.

Go To ..., by Steve Lohr, relates some really interesting material about people who have made major contributions to software, from languages and tools to operating systems, written for the layman. It seems very accurate in the places where I know the story, and it's often fascinating.

Security

Secrets and Lies: Digital Security in a Networked World, Bruce Schneier, Wiley, 2000. A long litany of scary stories about security and privacy threats and breaches, quite accessible to the non-specialist. In the end, there's too much complaining and not enough explanation and assessment. But well worth reading. Much the same comments could be made about Schneier's more recent Beyond Fear: Thinking Sensibly about Security in an Uncertain World.

Security Engineering: A Guide to Building Dependable Distributed Systems, Ross J. Anderson, Wiley, 2002. I prefer this to Schneier. Occasionally more technical, but most parts will be accessible to anyone. The bottom line? Security is exceptionally hard, and many of the problems are people problems (which is also Schneier's conclusion).

Building Secure Software, John Viega and Gary McGraw, Addison-Wesley, 2001. Very practical guide to doing things better, especially for C programmers. Writing Secure Code (2nd edition), Michael Howard and David LeBlanc, Microsoft Press, 2002. A more Microsoft-focused take on the same problem, and a nice complement to Viega and McGraw.

Miscellaneous Cultural Enrichment

You should learn how to write well. The best small book on the topic is Strunk and White's The Elements of Style, well worth the minuscule price.

How to Lie with Statistics, Darrell Huff, Norton, 1954 (reissued in 1993). A wonderful little book that will immunize you for a lifetime against statistical chicanery and meaningless numerical presentations.

The COS 109 bibliography lists some other books worth looking at.