Shlomi Fish’s Book Reviews
Shlomi Fish’s Non-Fiction Book Reviews
This is a list of books I have read and hereby review. At the moment, it is focused on non-fiction, but I hope to add fiction later on in a different section.
So if you’re looking for a good book to read, and are desperate enough to take my advice (☺), look no further than here. Happy reading!
- My Most Influential Books (in Chronological Order)
- Other Book Reviews
- Non-Technical Books
- The Origin of Consciousness in the Breakdown of the Bicameral Mind
- The Mythical Man-Month: Essays on Software Engineering
- The Design of Everyday Things
- Guns, Germs and Steel: The Fates of Human Societies
- The Penguin Book of Curious and Interesting Puzzles
- Hackers and Painters: Big Ideas from the Computer Age
- Mathematics and Humor: A Study of the Logic of Humor
- I Think, Therefore I Laugh
- Beyond Numeracy
- Technical Books
- Programming Perl
- Computation Structures
- Structure and Interpretation of Computer Programs
- User Interface Design for Programmers
- Refactoring - Improving The Design of Existing Code
- The Art of UNIX Programming
- The qmail Handbook
- SVG Programming - The Graphical Web
- Mastering Algorithms with Perl
- Porting UNIX Software
- Computer Science & Perl Programming: Best of The Perl Journal
- Games, Diversions & Perl Culture: Best of the Perl Journal
- Higher Order Perl: Transforming Programs with Programs
- Perl Hacks
- Perl Best Practices
- Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity
- The Pragmatic Programmer: From Journeyman to Master
- Extreme Programming Explained
- Mastering Perl
- Test Driven Development by Example
- Programming Pearls
- More Programming Pearls: Confessions of a Coder
- The Algorithm Design Manual
- Non-Technical Books
My Most Influential Books (in Chronological Order)
This is a list of the four or so books that I found the most influential on my thinking. It is given here in the chronological order in which I read them.
Innumeracy - Mathematical Illiteracy and its Consequences
John Allen Paulus
This is a great book about how the fact that people don’t understand Mathematics or don’t apply it well leads to various side-effects, such as believing in superstition, irrational fears, or mis-approximations.
The Neo-Tech Discovery by Frank R. Wallace and others
This book is not available in book stores, but I believe it may be ordered by mail order by requesting a catalogue from the Neo-Tech site. It is also available online as the Neo-Tech Advantages and the the Selected Portions from the Neo-Tech Discovery.
This is the most influential book I ever read. Neo-Tech is an extension and re-organization of Ayn Rand’s Objectivism, that also integrates Psychology, Business Practices, Science and other fields. After reading and integrating this book, one can throw away all the mental garbage that prevents growth, and no longer be influenced by various fallacies you constantly hear and believe in.
Reading this document will make your mind think more clearly about the facts of human existence, and remove any unnecessary guilt you have.
Feeling Good: The New Mood Therapy
David D. Burns
This is a field guide to cognitive Psychology. It explains how our conscious thoughts cause unnecessary mood swings, including depressions and euphorias. It also gives practical measures to correct one’s cognitive process, raise one’s self-esteem, handle criticism, and recover from unnecessary mood swings.
This book can also help people maintain a good self-esteem, and understand why people have mood swings. It is a very good anti-thesis to the traditional Freudian or similar psychology that is very misleading. A highly recommended read!
The Cathedral & The Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary
Eric S. Raymond
This book is also available online on Raymond’s Site.
This book is a set of mind-revolving essays about the Free and Open Source Software world - their culture, conventions, customs; organizational, cultural and economical conventions - and by inflection on Free/Open Culture in general. It is a must read for every person living in the 21st century.
Other Book Reviews
These are other books I am reviewing. (in no particular order).
Non-Technical Books
This book presents a theory on the evolution of human consciousness that sounds fantastic at first, but that the author backs with a lot of evidence. Essentially, consciousness (or rather “sentience”) is a learned layer that is not necessary for normal operation. Furthermore, all humans up to around 1300 BC were completely void of consciousness, when they developed it out of necessity, starting at the Near East.
The book kept me entertained, and enlightened me.
The Mythical Man-Month: Essays on Software Engineering
Frederick P. Brooks
This book, written over 20 years ago, by the project manager of IBM’s OS/360 is one of the classic texts on software engineering, and for a very good reason. It still feels very fresh now, and supplies a lot of insights about how to manage a software project. It will also prove of interest to managers of other teams (that do not necessarily work on software).
The 20th anniversary edition, contains some later essays and conclusions by the same author.
The Design of Everyday Things
Donald A. Norman
A great book about designing for usability. Instead of covering software, it covers everyday things like doors, taps or phones, and why or why not they make sense. This book is amusing, insightful, and makes a very good read.
One of the central themes of the book is that users of these tools tend to blame themselves for being unable to use the tools easily, while the fault is in fact in the tools, because they lack usability and are designed badly.
Guns, Germs and Steel: The Fates of Human Societies
Jared Diamond
This books tries to answer the question of why did different human societies evolve differently. It demonstrates that geography and bio-geography played a big role in shaping the destinies of people in different places on our planet. This book contains many interesting anecdotes, a wonderful theme, and is a pleasure to read. Highly recommended.
This book provides a wonderful collection of puzzles, and brain-teasers, outlining their history, and various interesting facts about them. It provides solutions at the end.
This is a collection of essays which appeared on the personal site Paul Graham. I highly enjoyed reading his essays and learned a lot from them. There are some issues with his style of writing, and with some of his conclusions, but as a whole, they are highly recommended.
Mathematics and Humor: A Study of the Logic of Humor
John Allen Paulos
In this book, John Allen Paulos analyses some of the mathematics behind humour, and what makes us laugh. A recommended read.
I Think, Therefore I Laugh
John Allen Paulos
This book starts by quoting Wittgenstein that A serious and good philosophical work could be written consisting entirely of jokes
. This book goes on to demonstrate how such concepts as logic, mathematics, science, and language are problematic and how misapplying them can yield funny results.
This book features Groucho Marx, as well as a host of imaginary placeholder characters such as George, Waldo and Martha. I read it several times, and enjoyed it every time I did.
Beyond Numeracy
John Allen Paulos
This book explains a little out of many subjects of mathematics, in a very engaging way. I bought it and enjoyed it.
Technical Books
Programming Perl
Larry Wall et al
This is the canonical reference to the Perl programming language by some of its best and best-known experts. It covers the entire Perl language as of perl-5.6.1, with any nuance and any fine point being mentioned. Furthermore, it is a very entertaining read: the style is lightweight and easy, and it is one of the funniest technical books I’ve ever read.
Note that programmers who don’t know how to program Perl at all yet, cannot use it in order to learn the language. Instead, it is recommended, that they first learn Perl and only then read “Programming Perl”. For learning Perl, see the Perl Beginners’ Site. (Thanks to “infidel” from Freenode for suggesting this.)
Computation Structures
Stephen A. Ward & Robert H. Halstead
A great book about logic design and how to construct a computer from very basic elements. Also covers some layers above the digital circuits level, but this material did not particularly interest me. I studied using this book in two of my Technion courses, and can highly recommend it.
Structure and Interpretation of Computer Programs
Harold Abelson & Gerald Jay Sussman
An excellent book that teaches the basics of good software design using the Scheme programming language. Introduces very interesting techniques, and demonstrates how they can be useful for real-life tasks. I took two courses in the Technion based on this book, and they also were very enlightening.
The text of this book and other related resources are available online on its site.
User Interface Design for Programmers
Joel Spolsky
I really liked the online version of the book when I read it on Joel’s site, and the printed version contains several additional chapters. This book is very funny, enlightening, with many screenshots and diagrams. It’s a must for anyone doing GUI or Web design. Highly recommended.
Refactoring - Improving The Design of Existing Code
Martin Fowler
Refactoring is improving the internal design of a code without changing its external behaviour. This book is the definitive guide to refactoring, at least in object-oriented systems.
The first chapters of the book are rather general. They introduce the motivation for refactoring, why it is good, and why it actually speeds up development. Also, they also give a list of “bad smells” in the code that indicate that a refactoring is needed (like duplicate code or magic numbers). I found the bad smells part to be the most illuminating part of the book.
The middle part of the book which is its lion’s share is a catalogue of various refactorings. These are things like extracting a method, creating a superclass, eliminating inheritance, or creating one. The author explains there each refactoring, when to do it, the steps for performing it most safely, and then usually gives an example of how to do it. I found the catalogue a bit tedious to read, but interesting nonetheless. It taught me some new techniques that I was not previously aware of.
The final chapters wrap up the book, and are also interesting to read. They consist of an essay by William Opdyke (who wrote a very early research paper on refactoring) titled “Refactoring, Reuse and Reality”, a chapter about Refactoring Tools, and a short summarising chapter by Kent Beck.
The book smells a bit of hype: Java is used as the example language (albeit its use there is quite justified); there are many UML diagrams (which were at first confusing to me due to the many kind of arrows they have); and there are references of several of the so-called Design Patterns. (from the Gang of Four book and otherwise). But they don’t detract much from an otherwise good book.
The book can also be used as a reference to look for refactorings or see how can they be performed well. I think this book has made me more conscious of how I refactor and write code, and I try to refactor in a way that will minimize the errors caused by it. I’m also now more aware of the “two hats”, as Fowler puts it, of either refactoring code or adding new features.
To sum, this is a very good and important book to read, especially for beginning programmers. I’m just not sure it justifies the $54.00 list price. This price is too high for a book of this scope.
The Art of UNIX Programming
Eric S. Raymond
A very nice book about the elements and know-how of planning and implementing UNIX software. You can read a more detailed review and critique of this book by me, and also read it online.
The qmail Handbook
Dave Sill
A very good book about the qmail mail server. Introduces the fundamental concepts of the server, and then instructs how to operate it, and configure other software for it. One thing to note about this book is that it convinced me that I should avoid using qmail unless it’s already installed and has a configuration. qmail has a very problematic license, lacks most necessary features out of the box, is no longer maintained, has a very problematic creator and copyright owner, etc.
If you’re going to install a new mail server, take a look at Postfix, Exim, Courier or whatever. These are open-source, are actively developed, and lack all of the aforementioned problems. “The qmail Handbook”, however, is useful for those who need to administer existing qmail configurations, or migrate them to a different implementation. You can also take a look at Life with qmail which is a guide to qmail, by the same author.
SVG Programming - The Graphical Web
Kurt Cagle
A great book about SVG (= Scalable Vector Graphics), the emerging standard for vector graphics, animation and interactive applets on the web. It explains the standard step by step, with many nuances covered. The final chapters cover some advanced techniques. Highly recommended.
Mastering Algorithms with Perl
John Macdonald, Jon Orwant and Jarkko Hietaniemi
I took a course about algorithms in the Technion before reading this book, and yet found this book to be very interesting. This books covers a lot of different fields and topics, each one with its own algorithms and each can give you a taste of what this field does. This is one of the best books I read in the O’Reilly series of Perl books, but it’s not specifically about Perl. Highly Recommended for Programmers.
Porting UNIX Software
Greg Lehey
When I started working in a Web Design company, UNIX systems were all we had and the only thing we liked in order to give our clients a presence on the Internet. However, we used a plethora of UNIXes: IRIX, SunOS 4.1.3, FreeBSD, Linux, and there are many more flavours of UNIX out there. So I naturally wondered what was the difference between them.
A co-worker recommended that in order to better understand what’s involved I should read this book, and so I bought it from a local Israeli book store. I did not regret buying it - this book is simply superb. Some chapters (such as the one about handling terminal I/O) are of little interest to most programmers, but as a general rule this book gives a lot of essential information about how to write portable software.
Many Windows programmers write code and test it on their local machine, and think it will be perfectly acceptable this way. But Windows is only one OS, and the x86’s is only one processor architecture. In the UNIX world, there are plenty of other operating systems and processor architectures. Often many subtle problems can occur because of lack of knowledge of UNIX concepts.
The book is now available online on the author’s site under one one of the Creative Commons licences.
The first installment in the series of three books containing a collection of articles from “the Perl Journal”. Very nice book, with interesting articles. You can read my review of it to the Perl mongers.
The third installment in the series of three books containing a collection of articles from “the Perl Journal”. As a whole it is very entertaining and enlightening. You can read my review of it to the Perl mongers.
Higher Order Perl: Transforming Programs with Programs
Mark Jason Dominus
“Higher Order Perl” is both enjoyable and accessible. Mark Jason Dominus demonstrates some techniques that originated from the LISP world and shows how to implement them in Perl, and how they can be put into good use. I learned a lot from this book: how currying, iterators and streams can be useful, how a recursive descent parser can be implemented, and many other things.
Perl Hacks
chromatic, with Damian Conway and Curtis “Ovid” Poe
I received this book as a token of appreciation for my contributions to the 2006 Perl Advent Calendar. It’s the first book I read as part of the O’Reilly Hacks’ series of books, and it proved to be a light yet informative and entertaining read.
The book covers various useful “hacks” or small tricks that allow one to achieve a lot of cool tasks when working with Perl. These tricks are unorthodox and stretch the limit of one’s Perl knowledge. Since they require an advanced knowledge and understanding of Perl, I would recommend this book only for Perl experts. Some of the B:: using modules were even too high-level for me to understand how they worked internally. However, I understood the purpose of the code in all cases, even if I didn’t understand the code itself.
So it is a recommended read for people who’ve worked with Perl a lot, and wish to learn many new and useful tricks. Perl Hacks for Perl hackers, indeed!
Perl Best Practices
Damian Conway
Once upon a time, someone I talked with on IRC suggested I create and publicise a wishlist on Amazon.com so people can buy me gifts. I did so, and after a few months someone ordered me both this book and the book “The Princess Bride” (which I have read since then and also liked).
“Perl Best Practices” generated a lot of buzz in the Perl world, and so I had some good expectations. And happily the book has indeed fulfilled them. Perl Best Practices enumerates and explains the practice and rationale behind 256 best practices of Perl, that according to the author will result in better, more maintainable code.
I naturally didn’t fully agree with everything that was suggested there, but even so found it as a good food for thought. The book is highly recommended for anyone to read and become a better and more self-conscious Perl programmer.
After speaking with the guy who bought me this book on email he gave another best practice that was absent (and not-practised) from the book: sort your pattern modifiers alphabetically (I.e: /egix
instead of /gxie
so they can later be searched for.
This book is a collection of essays Joel Spolsky published on his Joel on Software site. Joel is an excellent writer, writing in a humorous and accessible way and providing many insights. I enjoyed reading his site, so I believe the book will definitely be very nice too.
Joel writes about software management from his experience working for several companies, from his vast knowledge, and more recently from starting his own software shop. I learned a lot from the articles on his site, and found them useful in my day-to-day work as a software developer.
I don’t always fully agree with everything Joel says, but even then, he provides a lot of useful food for thought.
The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt & David Thomas
I heard of this book from several sources (including the Joel on Software Book Recommendations’ page), and it was very much esteemed, so I decided to buy it. After fully reading it, I dare say that I found it relatively disappointing and unfulfilling, especially in consideration of the great expectations I had from it.
This book covers a series of best practices for a programmer or a team to become better and more capable. While it had some good points, they were in generally lost in the large amount of individual advice given. I still think many people may enjoy this book better than I did, but I personally found it lacking.
Extreme Programming Explained
Kent Beck
I heard a lot about Extreme Programming from my friends and associates, and especially from an Israeli Perl Monger who is very enthusiastic about it. So I decided to buy this book and see for myself if the fuss was justified.
I ended up really liking this book, and it did not disappoint me. It’s short, provides an accessible read, is written well, and it piques one’s interest.
Extreme Programming (XP) aims to explain how to run a good software development team in an organisation. By focusing on the values of XP, the proposed methods (work in pairs, write unit tests, have the customers on site, etc.), and illustrating with many useful stories and diagrams, this book makes for a very good read. Highly recommended.
Mastering Perl
brian d foy
Mastering Perl is the third book in the installment of O’Reilly’s three books which introduce Perl to people who are not familiar with. I haven’t read Learning Perl and Intermediate Perl, which are the first two installments of the series, because I felt that I already knew most of the material that they are going to cover. Now, brian has written Mastering Perl with the help of the community, by maintaining its sources in a version control repository, and that’s how I ended up finally reading it in 2009.
As a proficient Perl programmer who has been working with it since 1996, and have several modules on CPAN and some other open-source Perl projects, I should note that the book did not teach me too many new things. However, I found it to be well-written, mildly entertaining at times, and generally accurate. The coverage of some of the technologies there is somewhat out-of-date, but hopefully this will be fixed in later editions. So I can recommend this book to beginning programmers who already know the material in the previous two books in the series.
One fact to note is that the book focuses on generic Perl technologies that are useful for all types of programs, rather than on particular uses for Perl (e.g: web-development or database programming). As a result of it, I found the book to be of less interest to me, but naturally, this approach has its merit as it is good for all Perl programmers.
Test Driven Development by Example
Kent Beck
I was disappointed after I started reading an earlier book about “Test Driven Development” (TDD) that I have bought (here's my earlier review and a recommendation against it) but I decided to give the TDD sub-series of the Extreme Programming books another chance with the more elementary book in question. This time, the book met my expectations and I can recommend it.
First of all, Beck's book is relatively short and small, as opposed to the xUnit Test Patterns book. It is also interesting, entertaining and full of insights. It is divided into three sections:
In the first: a sample financial TDD project is developed in Java, with instructions on how to proceed every way. The standard “add-failing-test; get it to pass; refactor;” cycle is described there with a TODO list as a tool. This was the best section, in my opinion.
In the second section, Beck bootstraps an xUnit framework in Python starting from nothing (and compares it to doing brain surgery on yourself.).
In the third section, he briefly discusses various TDD patterns. I admit I did not pay enough attention there because I read the book before going to sleep when I was tired, and want to go over it again.
So I can recommend this book for all people who want to learn how to do TDD better. Mr. Beck kinda aims for the high ideal of TDD and I often deviate from it, which I think is OK.
Programming Pearls
Jon Bentley
I've heard this book mentioned in several places before buying it and reading it and it did not disappoint me. This book is really great, with interesting coverage of interesting programming and computer science-related topics. It has an extensive discussion of optimising code, which I appreciated, being very interested in it (see: my essay about it ), and lots of other interesting stuff. The second edition was updated for modern times, and feels quite fresh.
Bentley mentions in the book that he has written a book called "Writing Efficient Programs" which is now out-of-print with some techniques for optimising code. I was saddened to hear that it is indeed out-of-print, because I would like to read it. He does give a summary of the book in an appendix, though.
The book contains many exercises, most of which I’ve mentally thought about, but did not actually solve using the computer. Otherwise, I enjoyed reading this book and can wholeheartedly recommend it.
A fellow Perl programmer bought me this book as a birthday present from my Amazon.com wishlist because I put it there out of wishing to read the follow-up to the previous book in the series which I enjoyed. However, this book failed to meet my expectations, and I found it disappointing.
It does not have the same focus on topics that interest me and instead contains many different topics. While not being completely bad, it fails to live up to the promise of the previous book, and I cannot really recommend it. The book is also showing its age.
The book page on Amazon.com used to contain a single 3-star review for More Programming Pearls which kinda summarises my feelings.
The Algorithm Design Manual
Steven S. Skiena
I received this book as an Amazon.com gift, after I placed it on my wishlist by inspiration from that of someone else. For some reason, it was sent to an old address of ours, which caused some confusion because I did not recall ordering it. But eventually I realised what happened.
Based on the cover of the book, and its title, I got a somewhat different idea of what it would be about than what it really was, and thought it would be very technical and formal. However, this preconception was dis-spelled shortly after I started reading it. In fact, the book is quite offbeat, without too many rigorous proofs.
The book is split into two parts. In the first one, we are given an overview of the theory behind algorithms with a lot of sample code in C, and with some "take home lessons", detailed "war stories", where the author explains how he implemented the topics covered in his work as a professor and algorithm designer, some exercises, and an accessible coverage of the subject. Some topics I liked there was the coverage of simulated annealing, his explanation of why he found genetic algorithms lacking, and the coverage of back tracking, all of which were missing from my formal computer science education.
The second part of the book was nicknamed "The Hitchhiker's Guide to Algorithms" and provides an overview of the various algorithms and their implementations available for the various algorithmic objectives. While also good and enlightening, my only qualm is that it took me a long time to read, and by that time, felt the first part of the book was a distant memory.
Still, this is a good book with good coverage of the subject of Algorithmics. I can recommend it.