Monday, November 12, 2007

The Computer Scientist's Library

Computer scientists are strange group of people, the job has all the drawbacks of a scientific job combined with all the drawbacks of an artistic job, in particular I am thinking of those of us who have to program for a living, writing computer programs is a complex business, it requires a mathematical precision and remarkable creativity. So it's like your job is being asked to create a masterwork painting every day, they have to be very artist and yet require an exact structure and form as well. And if you make an error it might be months later when it is discovered, just before the CDs are being pressed. It is a very dificult profession to sustain over a long period of time.

So what are the things that that make computer scientists a group? Shared views, shared interests, shared vocabulary and shared knowledge. One of the ways this happens is in the books that we read, so I've been trying to put together a short list of books that I think every computer scientist should read. After many starts and stops, this is my list of the top ten books in no particular order;

The Art of Computer Programming by Donald Knuth
O.K. I know I said that the list is in no particular order, but the Knuth books MUST be the top of any computer scientist's reading list. Knuth is a brilliant writer, exciting, a master of his subject, he puts the science into computer science.

Clifford Stoll's true life story of tracing a cracker who was using his computer as a bridge to access top secret information is definitely one of the most incredible computer books, inspiring and very well-written, and you learn a lot about Unix.

Hackers: Heroes of the Computer Revolution by Steven Levy
The definitive story of the Hacker movement; Greenblatt, Gosper, Stallman, names that are legendary in programming mythos, their early adventures in the MIT AI lab are documented here, and the beginings of the Open Source movement can be traced from here.

The Hacker Crackdown: Law and Disorder on the Electronic Frontier by Bruce Sterling
This brilliant book outlines the key events in the evolution of hackers (really "crackers"). The exciting events that shaped the face of Hackerdom like Operation Sundevil and the trial of "Knight Lightning"

The Tao of Programming by Geoffrey James
This is a book that spoofs the Tao Te Ching and consists of several chapters with interesting software development anecdotes, entitled - The Silent Void, The Ancient Masters, Design, Coding, Maintenance, Management, Corporate Wisdom, Hardware and Software, and the Epilogue.

The Elements of Programming Style by Brian Kernighan and P. J. Plauger
The title of this book pays homage to The Elements of Style by Strunk & White, an excellent book in the study of programming style, advocating the approach that computer programs should be written not only to satisfy the compiler, but also with human readers in mind.

This excellent book looks at the main elements of programming in the modren IT industry. It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible, easy to adapt, and reuse.

The Mythical Man-Month: Essays on Software Engineering by Fred Brooks
One of the best books ever written about the complexities of software development, the biggest lesson of this book is that the rules of common sense definitely do not apply when working on large software projects with teams of people.

The Secret Guide to Computers by Russ Walter
This book is considered a real cult book because of the author's distinctive, hilarious writing and the author's extreme devotion to his readers. The Guide covers everything relating to computers, from their hardware to their software to their history.

The C Programming Language by Brian Kernighan and Dennis Ritchie
More commonly called "Kernighan and Ritchie" this book is without a doubt one every programmer should read, written in a style that could almost be considered new wave, you have to be sitting at a computer with a C compiler to really enjoy this book.


O.K., that's good and well, but what about some books that are not computer science books, but computer scientists should read, here are five;

Discrete Mathematics: An Introduction for Software Engineers by Mike Piff
A really well-written book on discrete mathematics, topics covered include mathematical logic, set theory, finite and infinite relations and mapping, graphs, graphical algorithms and axiom systems, all good stuff for every computer scientist. Best of all it includes implementations of many of the algorithms in Modula-2.

One is the most interesting books ever written, described by the author as "a metaphorical fugue on minds and machines in the spirit of Lewis Carroll". The book examines the lives of logician Kurt Gödel, artist M. C. Escher and composer Johann Sebastian Bach, discussing common themes in their work and lives. At a deeper level, the book is a detailed and subtle exposition of concepts fundamental to mathematics, symmetry, and intelligence.

How to Solve It by George Pólya
Pólya's book is a really excellent guide to problem-solving. Unlike other books of this type, Pólya does not recommend any specific set of techniques by rather a more general heuristic approach to solving problems.

Numerical Recipes by William Press, Saul Teukolsky, William Vetterling and Brian Flannery
These are a collection of books by the above authors that contain an enormous amount of material on computational methods, the scope is supposed to be "everything up to, but not including, partial differential equations", although the second edition does include a chapter on PDEs that discusses the important concepts in the field and cites the most important papers.

The Emperor's New Mind by Roger Penrose
Roger Penrose's book is a remarkable exploration of the nature of human consciousness, his view is that consciousness is non-algorithmic, and thus cannot be modeled by a conventional Turing machine. He suggests that quantum mechanics plays an essential role in human consciousness. The collapse of the quantum wavefunction is seen as relating to the brain function.


And just for fun here are five fiction books that mention programming or are about computers in small or large ways. I always dip into one of these if I need a bit of inspiration.

Tron by Brian Daley
Based on the movie of the same name "Tron" the novel is really excellent, it adds a lot of characterisation and depth that was lacking in the movie, it also includes a lot of fun computer in-jokes that a programmer will enjoy. But most importantly the underlying philosophy of Tron is something that I very much believe in, that EVERY computer program you write contains a little bit of your spirit in it (no other programmer would write a program exactly the same way that you do, so each of your programs are unique to you).

Spock's World by Diane Duane
Not really about computer programming, but there is just one paragraph that makes this a magical book for programmers, near the end of the book Spock's father, Sarek who is a programmer on the planet Vulcan comes to Earth to work with human programmers, and in one paragraph Sarek reflects on the nature of human computer programmers, it's excellent.

The Prisoner's Dilemma by Jonathan Blum and Rupert Booth
Based on the TV show "The Prisoner" and using the game theory problem of the prisoner's dilemma as its central premise, this is a really fascinating book, and features a computer expert codenamed "Number 101" who seems very much like Alan Turing to me.

The Discworld Novels by Terry Pratchett
In particular the character of Ponder Stibbons embodies a lot of what a really good computer programmer should be like, plus "Anthill Inside", brilliant.

The Passing of the Techno-Mages: Books 1-3 by Jeanne Cavelos
These books are set in the future and tell the story of a group who use very advanced technology to simulate the effects of magic. The novels centre around the mystery of where this technology came from in the first place and how the lead character Galen treats this technology like a computer programmer.

No comments: