What non-Perl books do you recommend to Perlers?

I'm overhauling the perlbook documentation and moving the book list from perlfaq2 into it. Besides updating the references, I'd like to include a short section on non-Perl (technical) books that are useful to the Perl programmer. So far I have Jon Bentley's Programming Pearls, but that's an easy one.

What else is there? What other books do you think Perlers should read to help them be better Perl programmers?

Just to head off all the posts I know are coming, Lord of the Rings might help you understand the perl source code, but it's not going in perlbook.

Okay, maybe it is.


I can't recommend "The Pragmatic Programmer" highly enough.

In addition to Dave's suggestion:

Code Complete by Steven C. McConnell
The Algorithm Design Manual by Steven S. Skienna

(The second of those is a bit pricey and might target an area where Perl might not always be your language of choice.)

  • The Practice of Programming - Rob Pike and Brian W. Kernighan
  • The C programming language - Brian W. Kernighan & Dennis M. Ritchie
  • RESTful web services - Leonard Richardson & Sam Ruby
  • Mastering Regular Expressions - Jeffrey Friedl

I rather throw out all my Perl books than my copy of "Advanced Programming in the UNIX environment" by the late W. Richard Stevens. And then there's the oeuvre of Donald E. Knuth.

I second most of those already listed. The Mythical Man Month is still worthwhile, I think for a more systemic view of issues that continue to bedevil software development.

There's also the comp.risks archives and "Computer-Related Risks" by Peter G. Neumann. The book is about 15 years old but it is still relevant and the mailing list is still going strong.

In the lighter end: Coders At Work, Peter Seibel.

Something about design pattern is always useful.

"Design patterns : elements of reusable object-oriented software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides"

People from a java background seems to like "Head First Design Patterns" by Eric T Freeman, Elisabeth Robson, Bert Bates, and Kathy Sierra. I have the book and it is useful, but the style is *very* annoying (like someone trying really hard to be funny without much success).

Gödel, Escher, Bach because it makes you think.

Someone just beat me to Godel Escher Back (and even went through the effort to get the special character in there)

But I can't recommend TOG on Interface by Bruce Tognazinni more highly. Great, great introduction to the human factors end of programming and wildly entertaining to boot.

Many of us need SQL at some time, so I start with: Introduction to SQL by Rick van der Lans.

If more depth is needed: SQL for Smarties: Advanced SQL Programming by Joe Celko.

For CSS: Designing Web Pages with Cascading Style Sheets by Joel Sklar.

For a vast coverage of the subject: Software Engineering: A Practitioner's Approach by Roger Pressman.

And for the mathematically minded: Combinatorial Algorithms by Nijenhuis and Wilf.

I also recommend "The Pragmatic Programmer" for this is not only a non-Perl book but also sometimes a non-Programmer book. For example, off the top of my head, it has some advices like "your boss is your first customer" which I find invaluable, albeit so obvious. Hmm, maybe not that obvious.

`Software Requirements & Specifications' by Michael Jackson. Deceptively slim compilation of insights into one of the trickiest aspects of soft dev.

At least "No Silver Bullet", but really "The Mythical Man Month" should be read by everyone in the industry.

"Peopleware" - De Marco & Lister. An antidote to every manager who calls the staff they manage "resources".

"Facts & Fallacies Of Software Engineering" - Robert Glass. Attempts at empirical analysis in soft dev are all too rare. This book pulls in a lot of research and comes to some surprising conclusions.

"The Structure And Interpretation Of Computer Programs" - Abelson, Sussman & Sussman. Mind expanding exploration of how computer programs can be put together. Uses scheme as the demo language but the ideas are generally applicable.

"Introduction to Algorithms" - Cormen, Lieserson, Rivest. Will set you back about $25 US for a second hand copy. Readable mix of formal and informal algorithm descriptions.

"The Computational Beauty of Nature" Gary Flake. Inspiring,fascinating, and fun book on the use of software in modelling the world. Gives you a different perspective on what software can do. C++ code available.

"Think" - Simon Blackburn. Like it or not you will do philosophy as you develop your software. You may as well get an idea of what people who spent their lives thinking about thinking actually thought about.

There are loads of good papers & web-essays as well:

"A Rational Design Process & How To Fake It" - Parnas & Clements. Over 20 years old now but the core problem hasn't changed.

http://www.softpanorama.org/SE/anti_oo.shtml - Entertaining and informed critique of OO. Be warned that if you are an OO fundamentalist you will be offended.

http://www.stanford.edu/~ouster/cgi-bin/papers/scripting.pdf - John Ousterhout's seminal paper on scripting languages. As they were called before we realised they were dynamic.

http://www.cse.wustl.edu/~loui/praiseieee.html - An academic rues the choice of Java as the de-facto language in Comp Sci, his part in same, and sings the praises of the dynamic languages.

http://www.kettering.edu/~jhuggins/papers/primer.pdf Abstract State Machines are a practical, flexible, specification formalism. This primer is really easy to read and still conveys the elegance and power of the idea.

http://www.crockford.com/javascript/javascript.html - Doug Crockford is always worth reading. Here he explains why javascript is the worlds most misunderstood language. It is worth reading as an example of candid but balanced, analysis. Something not necessarily in bountiful supply in soft dev literature.

http://sunset.usc.edu/publications/TECHRPTS/1995/usccse95-507/ASP.pdf - Barry Boehm on a rational approach to soft dev processes. Read it then force feed it to your management.

Mastering Regular Expressions is indeed an indispensable technical read for every Perl programmer.

I also strongly second the suggestion to include The Mythical Man-Month. Not many books about software development can be considered timeless; I continue to be amazed how valid this book from and about the stone age of software development has remained throughout eras. But it is one of the most lucid essays I have ever read, so perhaps that should not be surprising.

Since books for complementary languages and technologies have been suggested, I’ll also throw in my hat with a strong recommendation for Javascript: The Good Parts.

Tracy Kidder's Soul of a New Machine. As timeless as The Mythical Man-Month. Brilliantly written, riveting book about the process of crashing a new minicomputer design; it's great on the technical side of things as well as the management techniques needed to get a bunch of mostly young engineers to bust their chops to get something done on time.

First of all see my books' recommendation over on my homepage. Especially of mention are:

  1. "Refactoring" by Martin Fowler
  2. "The Design of Everyday Things" by Donald A. Norman
  3. "The Mythical Man Month" (I agree with the other people who've mentioned it).
  4. "The Cathedral and the Bazaar" series by Eric S. Raymond - he has a more up-to-date version on his site.
  5. "Hackers and Painters" by Paul Graham (haven't read the book, but I read most of its composing essays on PG's site).
  6. Structure and Interpretation of Computer Programs
  7. The "Joel on Software" book (again, read most of its composing essays on the site)
  8. Programming Pearls - the 2nd edition from 2000 (the sequel "More Programming Pearls" is a bit disappointing, but still good)
  9. "Computation Structures" - a book explaining how to construct a computer - very enlightening.

Leave a comment

About brian d foy

user-pic I'm the author of Mastering Perl, and the co-author of Learning Perl (6th Edition), Intermediate Perl, Programming Perl (4th Edition) and Effective Perl Programming (2nd Edition).