Enjoy fast, free delivery, exclusive deals, and award-winning movies & TV shows with Prime
Try Prime
and start saving today with fast, free delivery
Amazon Prime includes:
Fast, FREE Delivery is available to Prime members. To join, select "Try Amazon Prime and start saving today with Fast, FREE Delivery" below the Add to Cart button.
Amazon Prime members enjoy:- Cardmembers earn 5% Back at Amazon.com with a Prime Credit Card.
- Unlimited Free Two-Day Delivery
- Instant streaming of thousands of movies and TV episodes with Prime Video
- A Kindle book to borrow for free each month - with no due dates
- Listen to over 2 million songs and hundreds of playlists
- Unlimited photo storage with anywhere access
Important: Your credit card will NOT be charged when you start your free trial or if you cancel during the trial period. If you're happy with Amazon Prime, do nothing. At the end of the free trial, your membership will automatically upgrade to a monthly membership.
Buy new:
$22.49$22.49
FREE delivery: Friday, Dec 15 on orders over $35.00 shipped by Amazon.
Ships from: Amazon.com Sold by: Amazon.com
Buy used: $10.98
Other Sellers on Amazon
& FREE Shipping
92% positive over last 12 months
Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet, or computer - no Kindle device required.
Read instantly on your browser with Kindle for Web.
Using your mobile phone camera - scan the code below and download the Kindle app.
Follow the author
OK
Programming Pearls 2nd Edition
| Price | New from | Used from |
- Kindle
$19.79 Read with our free app - Paperback
$10.98 - $22.4936 Used from $3.73 21 New from $21.50
Purchase options and add-ons
When programmers list their favourite books, Jon Bentley’s collection of programming pearls is commonly included among the classics. Just as natural pearls grow from grains of sand that irritate oysters, programming pearls have grown from real problems that have irritated real programmers. With origins beyond solid engineering, in the realm of insight and creativity, Bentley’s pearls offer unique and clever solutions to those nagging problems. Illustrated by programs designed as much for fun as for instruction, the book is filled with lucid and witty descriptions of practical programming techniques and fundamental design principles. It is not at all surprising that Programming Pearls has been so highly valued by programmers at every level of experience.
What remains the same in this edition is Bentley’s focus on the hard core of programming problems and his delivery of workable solutions to those problems. Whether you are new to Bentley’s classic or are revisiting his work for some fresh insight, the book is sure to make your own list of favourites.
- ISBN-100201657880
- ISBN-13978-0201657883
- Edition2nd
- PublisherAddison-Wesley Professional
- Publication date
1999
September 27
- Language
EN
English
- Dimensions
9.1 x 6.2 x 0.6
inches
- Length
256
Pages
Frequently bought together

Similar items that may ship from close to you
From the Publisher
A Must-Read for Every Working and Aspiring Programmer
This classic is on just about every single must-read list for programmers including lists featured on Lifehacker, Career Karma, DZone, Coding Jojo, Geeks for Geeks, and more.
"Since programming is really about problem solving, you’ll appreciate the thought process and 'back of the envelope' solutions that Jon Bentley shares in Programming Pearls (2nd Edition). Every chapter ends with a number challenges that are often used in technical job interviews, so make this book part of your job prep."
—Lifehacker's list of "14 Great Ways to Teach Yourself Code"
Editorial Reviews
Amazon.com Review
The "pearls" in question center not only on choosing the right algorithms (like binary searches, sorting techniques, or sparse arrays) but also on showing how to solve problems effectively. Each chapter frames a particular programming task--such as sorting numbers, creating anagrams, or counting the words in a block of text--many drawn from Bentley's experiences in his long career as a developer. The book traces the process of arriving at a fast, efficient, and accurate solution, along with code profiling to discover what works best. After refining the correct answer, each chapter enumerates programming principles that you can use on your own.
The author also challenges you to think like an engineer, and each chapter ends with about a dozen problems to get you thinking creatively about design issues. (Sidebars on such historical topics as the first computer solutions to computer chess, spell-checking, and even architectural design help create a perspective on successful problem solving and make for a truly educational and enjoyable tour of how to become a better programmer.) Bentley also asks the reader to think analytically about the world with "back of the envelope" estimation techniques drawn from engineering. Appendices list the algorithms and code rules covered in the book, plus some sample solutions.
Fans of the first edition of this title will be pleased to see this favorite computer text brought up to date for today's faster hardware. Whether you want to improve your command of algorithms or test your problem-solving skills, the new version of Programming Pearl is a challenging, instructive, and thoroughly entertaining resource. --Richard Dragan
Topics covered: Programming and problem-solving tutorial, sorting algorithms, merge sort, bit vectors, binary searches, program correctness and testing, improving performance, engineering and problem-solving techniques, performance estimates, designing for safety, divide-and-conquer and scanning algorithms, tuning code, tips for more efficient memory usage, insertion sort, quicksort algorithms, sparse arrays, searching algorithms, binary search trees, heaps, priority queues, searching text, and generating random text.
From the Inside Flap
Computer programming has many faces. Fred Brooks paints the big picture in
The Mythical Man Month; his essays underscore the crucial role of management
in large software projects. At a finer grain, Steve McConnell teaches good programming
style in Code Complete. The topics in those books are the key to good software
and the hallmark of the professional programmer. Unfortunately, though, the
workmanlike application of those sound engineering principles isn't always thrilling
-- until the software is completed on time and works without surprise.
About the Book
The columns in this book are about a more glamorous aspect of the profession:
programming pearls whose origins lie beyond solid engineering, in the realm
of insight and creativity. Just as natural pearls grow from grains of sand that
have irritated oysters, these programming pearls have grown from real problems
that have irritated real programmers. The programs are fun, and they teach important
programming techniques and fundamental design principles.
Most of these essays originally appeared in my ''Programming Pearls'' column
in Communications of the Association for Computing Machinery. They were
collected, revised and published as the first edition of this book in 1986.
Twelve of the thirteen pieces in the first edition have been edited substantially
for this edition, and three new columns have been added.
The only background the book assumes is programming experience in a high-level
language. Advanced techniques (such as templates in C++) show up now and then,
but the reader unfamiliar with such topics will be able to skip to the next
section with impunity.
Although each column may be read by itself, there is a logical grouping to
the complete set. Columns 1 through 5 form Part I of the book. They review programming
fundamentals: problem definition, algorithms, data structures and program verification
and testing. Part II is built around the theme of efficiency, which is sometimes
important in itself and is always a fine springboard into interesting programming
problems. Part III applies those techniques to several substantial problems
in sorting, searching and strings.
One hint about reading the essays: don't go too fast. Read them carefully,
one per sitting. Try the problems as they are posed -- some of them look easy
until you've butted your head against them for an hour or two. Afterwards, work
hard on the problems at the end of each column: most of what you learn from
this book will come out the end of your pencil as you scribble down your solutions.
If possible, discuss your ideas with friends and colleagues before peeking at
the hints and solutions in the back of the book. The further reading at the
end of each chapter isn't intended as a scholarly reference list; I've recommended
some good books that are an important part of my personal library.
This book is written for programmers. I hope that the problems, hints, solutions,
and further reading make it useful for individuals. The book has been used in
classes including Algorithms, Program Verification and Software Engineering.
The catalog of algorithms in Appendix 1 is a reference for practicing programmers,
and also shows how the book can be integrated into classes on algorithms and
data structures.
The Code
The pseudocode programs in the first edition of the book were all implemented,
but I was the only person to see the real code. For this edition, I have rewritten
all the old programs and written about the same amount of new code. The programs
are available at this book's web site. The code includes much of the scaffolding
for testing, debugging and timing the functions. The site also contains other
relevant material. Because so much software is now available online, a new theme
in this edition is how to evaluate and use software components.
The programs use a terse coding style: short variable names, few blank lines,
and little or no error checking. This is inappropriate in large software projects,
but it is useful to convey the key ideas of algorithms. Solution 5.1 gives more
background on this style. The text includes a few real C and C++ programs, but
most functions are expressed in a pseudocode that takes less space and avoids
inelegant syntax. The notation for i = 0, n) iterates i from
0 through n-1. In these for loops, left and right parentheses denote
open ranges (which do not include the end values), and left and right square
brackets denote closed ranges (which do include the end values). The phrase
function(i, j) still calls a function with parameters i and j,
and arrayi, j still accesses an array element.
This edition reports the run times of many programs on ''my computer'', a 400MHz
Pentium II with 128 megabytes of RAM running Windows NT 4.0. I timed the programs
on several other machines, and the book reports the few substantial differences
that I observed. All experiments used the highest available level of compiler
optimization. I encourage you to time the programs on your machine; I bet that
you'll find similar ratios of run times.
To Readers of the First Edition
I hope that your first response as you thumb through this edition of the book
is, ''This sure looks familiar.'' A few minutes later, I hope that you'll observe,
''I've never seen that before.''
This version has the same focus as the first edition, but is set in a larger
context. Computing has grown substantially in important areas such as databases,
networking and user interfaces. Most programmers should be familiar users of
such technologies. At the center of each of those areas, though, is a hard core
of programming problems. Those programs remain the theme of this book. This
edition of the book is a slightly larger fish in a much larger pond.
One section from old Column 4 on implementing binary search grew into new Column
5 on testing, debugging and timing. Old Column 11 grew and split into new Columns
12 (on the original problem) and 13 (on set representations). Old Column 13
described a spelling checker that ran in a 64-kilobyte address space; it has
been deleted, but its heart lives on in Section 13.8. New Column 15 is about
string problems. Many sections have been inserted into the old columns, and
other sections were deleted along the way. With new problems, new solutions,
and four new appendices, this edition of the book is 25 percent longer.
Many of the old case studies in this edition are unchanged, for their historical
interest. A few old stories have been recast in modern terms.
Acknowledgments for the First Edition
I am grateful for much support from many people. The idea for a Communications
of the ACM column was originally conceived by Peter Denning and Stuart Lynn.
Peter worked diligently within ACM to make the column possible and recruited
me for the job. ACM Headquarters staff, particularly Roz Steier and Nancy Adriance,
have been very supportive as these columns were published in their original
form. I am especially indebted to the ACM for encouraging publication of the
columns in their present form, and to the many CACM readers who made
this expanded version necessary and possible by their comments on the original
columns.
Al Aho, Peter Denning, Mike Garey, David Johnson, Brian Kernighan, John Linderman,
Doug McIlroy and Don Stanat have all read each column with great care, often
under extreme time pressure. I am also grateful for the particularly helpful
comments of Henry Baird, Bill Cleveland, David Gries, Eric Grosse, Lynn Jelinski,
Steve Johnson, Bob Melville, Bob Martin, Arno Penzias, Marilyn Roper, Chris
Van Wyk, Vic Vyssotsky and Pamela Zave. Al Aho, Andrew Hume, Brian Kernighan,
Ravi Sethi, Laura Skinger and Bjarne Stroustrup provided invaluable help in
bookmaking, and West Point cadets in EF 485 field tested the penultimate draft
of the manuscript. Thanks, all.
Acknowledgments for the Second Edition
Dan Bentley, Russ Cox, Brian Kernighan, Mark Kernighan, John Linderman, Steve
McConnell, Doug McIlroy, Rob Pike, Howard Trickey and Chris Van Wyk have all
read this edition with great care. I am also grateful for the particularly helpful
comments of Paul Abrahams, Glenda Childress, Eric Grosse, Ann Martin, Peter
McIlroy, Peter Memishian, Sundar Narasimhan, Lisa Ricker, Dennis Ritchie, Ravi
Sethi, Carol Smith, Tom Szymanski and Kentaro Toyama. I thank Peter Gordon and
his colleagues at Addison-Wesley for their help in preparing this edition.
0201657880P04062001
From the Back Cover
"The first edition of Programming Pearls was one of the most influential books I read early in my career, and many of the insights I first encountered in that book stayed with me long after I read it. Jon has done a wonderful job of updating the material. I am very impressed at how fresh the new examples seem."
―Steve McConnell
When programmers list their favorite books, Jon Bentley’s collection of programming pearls is commonly included among the classics. Just as natural pearls grow from grains of sand that irritate oysters, programming pearls have grown from real problems that have irritated real programmers. With origins beyond solid engineering, in the realm of insight and creativity, Bentley’s pearls offer unique and clever solutions to those nagging problems. Illustrated by programs designed as much for fun as for instruction, the book is filled with lucid and witty descriptions of practical programming techniques and fundamental design principles. It is not at all surprising that Programming Pearls has been so highly valued by programmers at every level of experience.
In this revision, the first in 14 years, Bentley has substantially updated his essays to reflect current programming methods and environments. In addition, there are three new essays on
• testing, debugging, and timing
• set representations
• string problems
All the original programs have been rewritten, and an equal amount of new code has been generated. Implementations of all the programs, in C or C++, are now available on the Web.
What remains the same in this new edition is Bentley’s focus on the hard core of programming problems and his delivery of workable solutions to those problems. Whether you are new to Bentley’s classic or are revisiting his work for some fresh insight, the book is sure to make your own list of favorites.
0201657880B04062001
Excerpt. © Reprinted by permission. All rights reserved.
About the Book The columns in this book are about a more glamorous aspect of the profession: programming pearls whose origins lie beyond solid engineering, in the realm of insight and creativity. Just as natural pearls grow from grains of sand that have irritated oysters, these programming pearls have grown from real problems that have irritated real programmers. The programs are fun, and they teach important programming techniques and fundamental design principles.
Most of these essays originally appeared in my ``Programming Pearls'' column in Communications of the Association for Computing Machinery. They were collected, revised and published as the first edition of this book in 1986. Twelve of the thirteen pieces in the first edition have been edited substantially for this edition, and three new columns have been added.
The only background the book assumes is programming experience in a high-level language. Advanced techniques (such as templates in C++) show up now and then, but the reader unfamiliar with such topics will be able to skip to the next section with impunity.
Although each column may be read by itself, there is a logical grouping to the complete set. Columns 1 through 5 form Part I of the book. They review programming fundamentals: problem definition, algorithms, data structures and program verification and testing. Part II is built around the theme of efficiency, which is sometimes important in itself and is always a fine springboard into interesting programming problems. Part III applies those techniques to several substantial problems in sorting, searching and strings.
One hint about reading the essays: don't go too fast. Read them carefully, one per sitting. Try the problems as they are posed -- some of them look easy until you've butted your head against them for an hour or two. Afterwards, work hard on the problems at the end of each column: most of what you learn from this book will come out the end of your pencil as you scribble down your solutions. If possible, discuss your ideas with friends and colleagues before peeking at the hints and solutions in the back of the book. The further reading at the end of each chapter isn't intended as a scholarly reference list; I've recommended some good books that are an important part of my personal library.
This book is written for programmers. I hope that the problems, hints, solutions, and further reading make it useful for individuals. The book has been used in classes including Algorithms, Program Verification and Software Engineering. The catalog of algorithms in Appendix 1 is a reference for practicing programmers, and also shows how the book can be integrated into classes on algorithms and data structures.
The Code The pseudocode programs in the first edition of the book were all implemented, but I was the only person to see the real code. For this edition, I have rewritten all the old programs and written about the same amount of new code. The programs are available at this book's web site. The code includes much of the scaffolding for testing, debugging and timing the functions. The site also contains other relevant material. Because so much software is now available online, a new theme in this edition is how to evaluate and use software components.
The programs use a terse coding style: short variable names, few blank lines, and little or no error checking. This is inappropriate in large software projects, but it is useful to convey the key ideas of algorithms. Solution 5.1 gives more background on this style. The text includes a few real C and C++ programs, but most functions are expressed in a pseudocode that takes less space and avoids inelegant syntax. The notation for i = [0, n) iterates i from 0 through n-1. In these for loops, left and right parentheses denote open ranges (which do not include the end values), and left and right square brackets denote closed ranges (which do include the end values). The phrase function(i, j) still calls a function with parameters i and j, and array[i, j] still accesses an array element.
This edition reports the run times of many programs on ``my computer'', a 400MHz Pentium II with 128 megabytes of RAM running Windows NT 4.0. I timed the programs on several other machines, and the book reports the few substantial differences that I observed. All experiments used the highest available level of compiler optimization. I encourage you to time the programs on your machine; I bet that you'll find similar ratios of run times.
To Readers of the First Edition I hope that your first response as you thumb through this edition of the book is, ``This sure looks familiar.'' A few minutes later, I hope that you'll observe, ``I've never seen that before.''
This version has the same focus as the first edition, but is set in a larger context. Computing has grown substantially in important areas such as databases, networking and user interfaces. Most programmers should be familiar users of such technologies. At the center of each of those areas, though, is a hard core of programming problems. Those programs remain the theme of this book. This edition of the book is a slightly larger fish in a much larger pond.
One section from old Column 4 on implementing binary search grew into new Column 5 on testing, debugging and timing. Old Column 11 grew and split into new Columns 12 (on the original problem) and 13 (on set representations). Old Column 13 described a spelling checker that ran in a 64-kilobyte address space; it has been deleted, but its heart lives on in Section 13.8. New Column 15 is about string problems. Many sections have been inserted into the old columns, and other sections were deleted along the way. With new problems, new solutions, and four new appendices, this edition of the book is 25 percent longer.
Many of the old case studies in this edition are unchanged, for their historical interest. A few old stories have been recast in modern terms.
Acknowledgments for the First Edition I am grateful for much support from many people. The idea for a Communications of the ACM column was originally conceived by Peter Denning and Stuart Lynn. Peter worked diligently within ACM to make the column possible and recruited me for the job. ACM Headquarters staff, particularly Roz Steier and Nancy Adriance, have been very supportive as these columns were published in their original form. I am especially indebted to the ACM for encouraging publication of the columns in their present form, and to the many CACM readers who made this expanded version necessary and possible by their comments on the original columns.
Al Aho, Peter Denning, Mike Garey, David Johnson, Brian Kernighan, John Linderman, Doug McIlroy and Don Stanat have all read each column with great care, often under extreme time pressure. I am also grateful for the particularly helpful comments of Henry Baird, Bill Cleveland, David Gries, Eric Grosse, Lynn Jelinski, Steve Johnson, Bob Melville, Bob Martin, Arno Penzias, Marilyn Roper, Chris Van Wyk, Vic Vyssotsky and Pamela Zave. Al Aho, Andrew Hume, Brian Kernighan, Ravi Sethi, Laura Skinger and Bjarne Stroustrup provided invaluable help in bookmaking, and West Point cadets in EF 485 field tested the penultimate draft of the manuscript. Thanks, all.
Acknowledgments for the Second Edition Dan Bentley, Russ Cox, Brian Kernighan, Mark Kernighan, John Linderman, Steve McConnell, Doug McIlroy, Rob Pike, Howard Trickey and Chris Van Wyk have all read this edition with great care. I am also grateful for the particularly helpful comments of Paul Abrahams, Glenda Childress, Eric Grosse, Ann Martin, Peter McIlroy, Peter Memishian, Sundar Narasimhan, Lisa Ricker, Dennis Ritchie, Ravi Sethi, Carol Smith, Tom Szymanski and Kentaro Toyama. I thank Peter Gordon and his colleagues at Addison-Wesley for their help in preparing this edition.
Product details
- Publisher : Addison-Wesley Professional; 2nd edition (September 27, 1999)
- Language : English
- Paperback : 256 pages
- ISBN-10 : 0201657880
- ISBN-13 : 978-0201657883
- Item Weight : 15.8 ounces
- Dimensions : 9.1 x 6.2 x 0.6 inches
- Best Sellers Rank: #169,485 in Books (See Top 100 in Books)
- #87 in Microsoft Programming (Books)
- #132 in Software Development (Books)
- #273 in Computer Software (Books)
- Customer Reviews:
Important information
To report an issue with this product, click here.
About the author

Discover more of the author’s books, see similar authors, read author blogs and more
Customer reviews
Customer Reviews, including Product Star Ratings help customers to learn more about the product and decide whether it is the right product for them.
To calculate the overall star rating and percentage breakdown by star, we don’t use a simple average. Instead, our system considers things like how recent a review is and if the reviewer bought the item on Amazon. It also analyzed reviews to verify trustworthiness.
Learn more how customers reviews work on AmazonReviews with images
Submit a report
- Harassment, profanity
- Spam, advertisement, promotions
- Given in exchange for cash, discounts
Sorry, there was an error
Please try again later.-
Top reviews
Top reviews from the United States
There was a problem filtering reviews right now. Please try again later.
Suppose, for the sake of argument, that you have a binary search that's holding up your loop. Or your Huffman coding just isn't snappy enough? "How is that possible?", you might say, fresh out of computer-science 201, "Didn't we just prove these algorithms are optimal?" Well yes, asymptotically up to an arbitrary constant multiplier. But this is the real world, and your code needs to go faster. If this sounds like your predicament, pull up a chair and read "Programming Pearls"; if it's not, you might wonder what all the fuss is about.
Next, fire up your favorite hardware (Sparc or x86 or PowerPC), favorite language (Perl, Java, or even C), favorite release of that language, along with your favorite interpreter or compiler (Hotspot or standard? GCC or Visual C++). And you'll need a profiler; might as well treat yourself to a good one if you're serious. Then fire up your code with a representative range realistic test data and observe what happens. Function by function, byte by byte. Then try to be as clever as Bentley in (a) figuring out why, (b) trying a range of alternatives, and (c) making it all go faster with minor tuning. Typically, you'll find a single bottleneck taking an order of magnitude more time than everything else, and work on that. Repeat until fast enough.
As well as this simple, yet surprisingly effective and realistic methodology, Bentley provides a range of concrete tips on making things go faster, from tweaking data structures to unfolding loops (especially precomputing low-order cases) to using accumulators and caching, all with an eye to underlying memory, communication and CPU resources.
Real code that has to run fast, like the code that we write at my current company for signal processing, speech recognition and speech synthesis, typically looks like the end-product of Bentley's refactorings. And it gets that way following exactly the path he lays out: analyze the problem, choose the right algorithm (or the right few to evaluate), and then tune it up using profiling.
"Programming Pearls" is the beginning of the road. You will need to look elsewhere for topics such as compression for memory saving, numerical algorithms, effective concurrency and memory sharing, efficient buffered I/O, garbage collection, and the wide range of dynamic programming and heuristic techniques.
Each column has been reorganized as a chapter. Chapters usually start with the presentation of a practical problem. Then various solutions are presented and are used as lessons to be learned. The writing style is clear and fun.
Programming Pearls is not a usual book teaching new programming concepts. Although it contains good and sometimes quite novel ideas, the aim of the book is not to teach something new. For example, the search and sort algorithms presented are well-known. The aim is to remind programmers to think hard before starting writing code. The book has great chapter on back-of-the-envelope computation for example which is useful when comparing various solutions. The easy solutions to the column's problems are usually very slow. The `good' solutions are lightening fast but require thinking hard about the problems. I would recommend having a book about algorithms nearby when reading Programming Pearls.
The book is full of little (and some not so little) exercises that are given throughout the chapters. Solutions or hints are given at the end. The exercises usually take a few hours to do properly and are a great resource. Again the emphasis is on making the reader think.
If you consider programming a repetitious activity, Programming Pearls will provoke you into thinking harder about finding elegant solutions. I recommend this book.
Bentley's classic work is still relevant but not in ways most programmers will imagine at the beginning. You'll probably never go and write your own search routines and re-implement classical data structures (you'll use the one that comes with the standard libraries of your language of choice) but you'll always meet some problems which will puzzle you with interesting constraints. This is what Programming Pearls is all about. Study the examples for fun and maybe laugh at them for their simplicity but then remember to applied the strong principles in that book to your daily technical problems (programming related or not).
I went back and read some of the columns from the ACM magazine which this book originated from. The book is definitely more up-to-date and readable.
I cannot over-emphasize the value of trying out the problems in the book without cheating and looking at the answers or hints. Great way to prepare programming interview questions, whether you're an interviewer or interviewee.
Top reviews from other countries
Disons que c'est très intéressant à lire pour quelqu'un qui aime l'algorithmie et qui veut s'assurer des bases solides de compréhension de certains aspects fondamentaux des logiciels (donc pas pour tout le monde!), mais contrairement aux commentaires généraux, je trouve que le livre a vieilli, et pas mal d'éléments ne sont plus pertinents.
Des considérations liées à la taille mémoire et aux performances des ordinateurs des années 80 ne s'appliquent plus du tout de façon générale aux ordinateurs en 2016, où pour quelques dizaines d'euros, un Raspberry Pi 3 dispose par exemple d'un giga-octet de mémoire. Par exemple, les conclusions de l'algorithme de rotation des éléments d'un tableau en mémoire sont aujourd'hui fausse, l'allocation d'un bloc mémoire temporaire et double copie donne une solution bien plus performance que les trois inversions proposées, et tout aussi simple.
L'auteur assume également des connaissances générales d'informaticiens qui me semblent... discutables, comme par exemple 90% de bugs dans la programmation (avec le choix du langage) d'un b-tree (insertion et impression dans l'ordre). Je fais du développement depuis bientôt 30 ans et j'ai fait passer des quantités d'entretiens d'embauche, et même si je peux citer des tonnes d'anecdotes sur les professionnels en entretien, dieu merci il y a plus de 10% qui savent écrire et discuter d'un b-tree...
En résumé, je redis que ça reste un livre à lire pour quiconque veut maîtriser des algorithmes de base, plus accessible et plus concret que "The Art of Computer Programming" par Donald Knuth (mais qui reste une référence), mais à prendre avec pas mal de hauteur de vue et de recul: la puissance et les capacités mémoire et disque des ordinateurs actuels, et l'évolution des langages à gestion automatique de la mémoire (Java, VB.Net, C#, Python...) rendant une bonne partie du discours technique daté ou parfois simplement plus vrai.
Petite anecdote finale, sur la 4è de couverture du livre que j'ai reçu il est écrit: "This edition is manufactured in India and is authorized for sale only in India, Bangladesh, Bhutan, Pakistan, Nepal, Sri Lanka and the Maldives" :-) Mais bon, ça reste 100% anglais américain qui se lit sans problème!
If you are a beginner looking for algorithms, skip it. You are better off watching some YouTube videos followed by reading Eva Tardos book on Algorithms.
I do not like books which refer to future chapters and this book does it a lot of times. If the reader is in chapter 2, I find it odd if the author refers to chapter 4. Do remember that this was not actually meant to be a book but is a collection of articles put together into what looks like a physical book. So, sometimes it feels like the natural flow is missing (many other books which are intended to be a book also fail in moving from one topic to another smoothly - that is a different story). Still worth the read so that you can have a 10 min conversation over a cup of tea with your girlfriend's grandmother, assuming she retired as a programmer.
I bought a new book and I do not think I would read it a second time - it is definitely not the go to book for algorithms. Buy a cheaper used copy than a new one if you want it in your collection. New book is not worth the price.
I still will like it in my personal library and am not donating it to anyone.
Plus there are a number of little perplexing changes.
- The book is printed with a very small margin and wide lines of thin font, which combine to really hurt readability. The original was a much prettier book
- The book added more questions that are in reality just apocryphal stories, rather than removing than removing the perplexing ones already there
- The new segments on things like "using spreadsheets and databases" which became dated immediately in a way none of the original text has
Despite these issues most of the content of the original is still in there somewhere, so I couldn't possibly give it less than 3 stars. However I would implore you not to buy the updated edition unless you really want to see the few bits of new content.
72-73, 76-77, 80-81, 84.
Have to return and repurchase it. The seller must make it sure that the book they send across aren't bad prints, as the customer can't check
it before purchasing it.
The author takes on the problem from the very beginning, going from understanding what the real problem is until the building of the final solution.
He explains step by step the actions taken, facing real life problems, what makes it even more interesting.
After you read this book you'll understand the importance of being rigorous about the description of the problem you are trying to solve and how a simple solution is almost always better than a complicated one.











