Bibliography for COS 333, Advanced Programming Techniques

Tue Dec 30 19:14:09 EST 2014

Current events

There are many useful blogs, news aggregators, and the like; it's worth taking a quick look every day or two to keep abreast of what's going on. These two will catch most stories.

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, and Graham, one of the founders of Y Combinator, has lots of insightful essays on startups. (I like this quote from Graham: "One of my tricks for generating startup ideas is to imagine the ways in which we'll seem backward to future generations.") Spolsky is also the co-creator of StackOverflow, an invaluable site for asking and answering questions about programming.

[Advertisement] D is for Digital, "what a well-informed person ought to know about computers and communications," provides a fair amount of general background for non-technical readers.

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), Rob Pike (Go). There is also a good trio of interviews about the C family, with Ritchie, Stroustrup and Gosling.

The C++ Programming Language (4th 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 latest 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 later editions. David Flanagan's Java in A Nutshell (5th edition) is a good handbook, though bulky. Oracle 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, 4th edition, Larry Wall, Tom Christiansen, et al. 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; I slightly prefer Python Essential Reference (4th edition) by David Beazley.

(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 well 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.

Rocket Surgery Made Easy, Steve Krug. In spite of its cutesy and misleading title, this is a useful (and very short) book on user interfaces; the sub-title, "The Do-It-Yourself Guide to Finding and Fixing Usability Problems", more or less describes it. I will try to incorporate some of its advice into the project requirements.

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.

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.

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.