Wednesday, January 09, 2008

Book Reviews: Dromey, TPOP, Art of Intrusion, Broker and CLR

During this winter break, I had the privilege of reading some of the most excellent, legendary and exciting books. I have been putting off some of these books for many years now! That's the best part of coming back to academia: you get a chance to read all the books you couldn't in good old schooling days!

Each of these books deserve their own posts, and this post might not do the justice to their value. But I'm too lazy to do it right now.

0. How to Solve it by Computer, by R.G. Dromey

The story dates back to 1999, during my second year of Engineering at PICT. I had the privilege to be taught by one of the most brilliant and talented faculties at PICT, Ramprasad Joshi (aka RaJo).

I would rate him as the _only_ person in PICT who knew _how_ to write an algorithm. And the only person back then at PICT who knew Unix. Always smiling, unlike other geeks you would get to see, spending most of his non-teaching time in what was known as 'The PICT Server Room' with his terminal and an assorted collection of exotic books. Wish I had spent more time with him then :( What came with this affluent personality was a store-house of good advices. Very few people had the knack and patience of grasping and coming to terms with his abstract ideas, a common problem amongst geeks. But for me and my chaddi-buddy, Anna (aka Arun), he unknowingly changed the way we would program for the rest of our lives.

During one of the lectures he made a very inconspicuous comment about the worth of this book. But I didn't miss it. The title was exciting to me, so the very next day I got hold of this book, never to open it until a few days back! For almost a decade it was lying in my collection. With hopes of getting an opportunity to read it, I packed it along my choicest books to get along from India. It wasn't until I read few pages I realized that this is one of the most under-appreciated computer books! Am glad I used my precious space and weight on this book.

Lucid and fluent, the algorithms and design notes on each of them are just perfect and very understandable. Finding square root of a number with O(lg n) complexity, finding all the prime factors of a given number, generating primes, generating all permutations of a given set, searching sorting, etc. Though this book is NOT a premier on algorithms, it most certainly is one of the best books on how to solve a lot of common everyday problems with computer, aptly, as the title suggests! Now I wish I should have read this book long back. I'm almost halfway through and have every intention of going through the very last page.

Each section solves a commonly encountered problem, and doesn't just thrusts algorithms at you, and leave you to wonder why certain choices were made. Rather, Dromey, starts with the most obvious-n-naive (and often most inefficient) solutions. He then, carefully eliminates each of the inefficiencies, making the algorithm more efficient and resilient. After multiple iterations through pages, what you get in end is the most efficient way to solve a problem! And since you have improved it along the way, when asked, you can say *exactly* why you made certain choices!

The only other book that I ever liked for algorithms was Data Structures and Algorithms, by Aho, Ullman and Hopcroft. Many people find this book to be too esoteric and incomprehensible. To me, this is the most lucid, concise and precise books on algorithms. Another excellent book on algorithms is Computer Algorithms by Horowitz and Shani. Both recommended to me by my senior Taklu.

1. The Practice of Programming, by Brian W. Kernighan, Rob Pike
This book, more conveniently referred to as TPOP, is one of the books that my senior, Talku suggested reading, again maybe in 1999s. An avid reader, I bought this book too on the first opportunity. And it lay in my collection, with only few of its pages ever touched. It wasn't until now that I read past through most of this legendary book on design principles.

How to write programs, how NOT to write them, common pitfalls, debugging tips, testing, performance, interface design, etc. This book has it all in a nice small package. A must must must must read for anyone who makes his living by programming, irrespective of his platform and language. Some of the examples from the book are so freaking concise and beautifully implemented, that I went back to the first chapter and starting taking my own notes, as The Programming Pearls! (Naah, I haven't yet read Programming Pearls, by Jon Bentley)

2. Introduction to Algorithms, by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest and Clifford Stein
Commonly referred to as CLR, I should have read this book during my under grad days. I repent not doing so :( Too mathematical at times, this is a mini-bible for algorithm fanatics: detailed design and thorough analysis of each of the algorithms, second only to Knuth's classic and most authoritative work on algorithms: TAOCP.

3. The Art of Intrusion, by Kevin Mitnick
Getting down to lesser technically oriented books... This is a wonderful one of it's kind novel-like compilation of real world exploits that the real hackers from around the world have confided in to Mitnick. The best part about this book is that to enjoy it you don't have to be a computer geek. For most part, any layman can read it to understand what the heck is hacking all about, after all! For the technically oriented, it gives us an insight into the dark and elusive world of an art known as intrusion! A real page turner.

4. The Broker, by John Grisham
I took very long time to get through it, only because I started in middle of the semester. But it's a real page turner, and keeps you on toes about what's going to happen next. I wouldn't rate it above The Partner, but The Broker is an amazing novel nonetheless.

Damn! I wish I had read all of these books back in my engineering (under grad) days. It would have definitely helped me. So, if you get the chance, without missing a beat, jump on! Definitely worth all the time (and probably money) you would invest. I insist you buy these books, that way you would be more pressed to swift through them at least once. At which point they will definitely become irresistible!


Sagar Bhanagay said...

Have read 1 & referred 2. Loved both! (I like the way u start the numbering from 0 :D)

The Shaolin said...

And I insist you read the 0th one.
It's more about *how* to solve problems, than algorithms per se. I mean, if you are ever intrigued by how to factorize a given number, how to generate a random number, how to generate all the permutations and combinations of given set of numbers, etc. etc., with a computer, which are done in a jiffy by hand, then this book has it all.

I was always curious about how these problems are solved, and this book quenched all my thirst for the same. Along with buddies like you, it's become a lifetime companion for me now :)

As to numbering, by starting it with 0, I don't have to remember 2 ways to start the numbering :D

Anonymous said...

I read Donald E. Knuth, The series of books, "The Art of Computer Programming" is very good and its huGE!!

I try reading 0th book!!


rsj said...

The review inspires people to read Dromey, instead of all the "C" (or Java, or now Python) books they think necessary and sufficient for programming. Shaolin, I want to contact the author of : Can you please help? You may please write me on