Thu Mar 2 17:06:32 EST 2000
Programming Perl, Larry Wall, Tom Christiansen, Randal L. Schwartz. The definitive reference, though not nearly as clear, organized or crisp as a reference should be.
The C++ Programming Language, 3rd 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 growth in standard libraries.
The Java Programming Language, 2nd edition, Ken Arnold, James Gosling. Gosling is the main inventor of Java. This is a reasonable introduction to the language but not to much of the vast array of libraries. I also like the first edition of Java in A Nutshell, by Flanagan; the second edition is inferior because many of the examples were removed to make room for library descriptions. Sun Microsystems maintains a very large online collection of Java information, including a tutorial and documentation.
(Advertisement.) The C Programming Language, Brian Kernighan, Dennis Ritchie.
(Advertisement.) The AWK Programming Language, Al Aho, Brian Kernighan, Peter Weinberger.
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, Steve McConnell. McConnell gives very 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.
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.
These are books that I found worth reading as background or for alternate views, or just because they were interesting; the original list was for CS109. No particular order. You might find the ones on life in various programming environments to be particularly germane.
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 Victorian Internet: The Remarkable Story of the Telegraph and the Nineteenth Century's On-Line Pioneers, Tom Standage. Walker & Co, 1998. (Paperback coming soon, it is said.) Fascinating story of the development and spread of a new technology and its effects in society; the parallels with today's Internet are many.
The Early History of Data Networks, Gerard Holzmann, Bjorn Pehrson IEEE Press, 1994. (I'm biased, since the first author is a good friend.) A more scholarly but still interesting description of the optical telegraph, which 50 years before the "Victorian Internet" encountered many of the same issues and had some similar effects on society.
Many of the technical and social issues seen in today's Internet showed up in earlier networks, notably the telegraph network (Standage) and the optical telegraph networks of 50 years earlier (Holzmann). Among the topics: coding, error detection and recovery, privacy and security, spies and cryptography, bandwidth, congestion, money and speculation, social change, and ultimately, the end as something better comes along. The optical telegraph was killed by the electrical, which in turn was killed by the telephone.
The Pattern in the Stone: The Simple Ideas That Make Computers Work, Danny Hillis, Basic Books, 1998. A wonderfully evocative title, and a good attempt to explain how computers work. Hillis is a computer architect, founder of the now-defunct Thinking Machines Corp, which made highly parallel computers, and a very creative person. The book has some fascinating stories (my favorite is the computer in every hotel doorknob) and reasonable descriptions of And, Or, Not, and how they can be used, with plumbing and mechanical analogies. Some minor errors in description and illustrations. Some short essays on artificial intelligence, parallel computing, neural nets, etc. It's too much hardware, at too low a level, then too sweeping and vague, but interesting nevertheless.
ENIAC: The Triumphs and Tragedies of the World's First Computer, Scott McCartney, Walker & Company, 1999. Compact description of the invention of the first stored program computer (not invented by von Neumann, a case made fairly compellingly by the author). Surprisingly, he omits any mention of the work of Konrad Zuse in Germany.
Dealers of Lightning: Xerox PARC and the Dawn of the Computer Age, Michael A. Hiltzik, Harper, 1999. A very detailed look at how Xerox's Palo Alto Research Center invented many of today's basic technologies -- personal computers, bitmap displays, grpahical user interfaces, the Ethernet, the laser printer -- and how Xerox managed to capitalize on only one. Careful fact-checking, according to my source.
Show-Stopper! The Breakneck Race to Create Windows NT and the Next Generation at Microsoft, Pascal Zachary, Free Press, 1994. Vivid description of life in a large software project. It's now six years later, and things are not getting simpler.
I Sing the Body Electronic: A Year With Microsoft on the Multimedia Frontier, Fred Moody, Penguin, 1996. Another life-inside-Microsoft book, just as remarkable in its way as Zachary's story.
Burn Rate: How I Survived the Gold Rush Years on the Internet, Michael Wolff, Simon & Schuster, 1998. Success and ultimate failure in starting a Web business, with lots of nasty jabs at people he worked with. More interesting than most, and better written.
Web Security & Commerce, Simson Garfinkel & Gene Spafford, O'Reilly, 1997. The level is a bit erratic, but much of it should be accessible to non-experts.
How to Set Up and Maintain a Web Site, Lincoln Stein, Addison Wesley, 1997. Lots of good material in this; my copy is very well worn. His Web Security book is also good, a useful complement to Garfinkel & Spafford.