Mon Feb 5 08:50:58 EST 2001
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. The second edition is a fine and cheaper
alternative; the first edition is obsolete and should be avoided.
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 slightly newer
"special" edition (white cover)
is even bigger and more expensive but includes more material on internationalization.
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 and the
third edition are
inferior because many of the examples
were removed to make room for library descriptions.
These are available in a separate book that I have not looked at.
Sun Microsystems maintains a large online
collection of
Java documentation,
including tutorials and reference material;
the
JFC Swing Tutorial
by Campione and Walrath is useful for building graphical interfaces.
(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 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 CS333 project planning is based in large 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.
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.
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 Victorian Internet: The Remarkable Story of the
Telegraph and the Nineteenth Century's On-Line Pioneers,
Tom Standage.
Walker & Co, 1998.
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, graphical 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 seven 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 falling apart from heavy use.
His
Web Security
book is also good, a useful complement to Garfinkel & Spafford.
I have also found Stein's
Network Programming with Perl useful.
Stein is an exemplary writer when it comes to combining
explanation and examples.
Languages
Programming
These are books that I think worth reading, for enrichment or
for good practical advice, or both.
Miscellaneous Cultural Enrichment