Discover products with sustainability features this Earth month
Enjoy fast, free delivery, exclusive deals, and award-winning movies & TV shows.
Kindle app logo image

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.

QR code to download the Kindle App

  • The Practice of Programming (Addison-Wesley Professional Computing Series)

Follow the author

Get new release updates & improved recommendations
Something went wrong. Please try your request again later.

The Practice of Programming (Addison-Wesley Professional Computing Series) 1st Edition


{"desktop_buybox_group_1":[{"displayPrice":"$49.99","priceAmount":49.99,"currencySymbol":"$","integerValue":"49","decimalSeparator":".","fractionalValue":"99","symbolPosition":"left","hasSpace":false,"showFractionalPartIfEmpty":true,"offerListingId":"NwtnRqvFECHDEZ07J1sVQBOeV3EMqMH9UgU7YA1juNPhdRH0zA27To1WzeLB3%2BjjLggA26MYsGDkx4Ho%2F29WV9hFiHav%2FGafoZbCxTzjlvomBbEb5kTONpgWMtfZPQ%2FxjXMUrR185EQ%3D","locale":"en-US","buyingOptionType":"NEW","aapiBuyingOptionIndex":0}]}

Purchase options and add-ons

With the same insight and authority that made their book The Unix Programming Environment a classic, Brian Kernighan and Rob Pike have written The Practice of Programming to help make individual programmers more effective and productive.

The practice of programming is more than just writing code. Programmers must also assess tradeoffs, choose among design alternatives, debug and test, improve performance, and maintain software written by themselves and others. At the same time, they must be concerned with issues like compatibility, robustness, and reliability, while meeting specifications.

The Practice of Programming covers all these topics, and more. This book is full of practical advice and real-world examples in C, C++, Java, and a variety of special-purpose languages. It includes chapters on:

  • debugging: finding bugs quickly and methodically
  • testing: guaranteeing that software works correctly and reliably
  • performance: making programs faster and more compact
  • portability: ensuring that programs run everywhere without change
  • design: balancing goals and constraints to decide which algorithms and data structures are best
  • interfaces: using abstraction and information hiding to control the interactions between components
  • style: writing code that works well and is a pleasure to read
  • notation: choosing languages and tools that let the machine do more of the work

Kernighan and Pike have distilled years of experience writing programs, teaching, and working with other programmers to create this book. Anyone who writes software will profit from the principles and guidance in The Practice of Programming.

Frequently bought together

This item: The Practice of Programming (Addison-Wesley Professional Computing Series)
$49.99
Get it as soon as Monday, Apr 20
Ships from and sold by Amazon.com.
+
$18.75
Get it as soon as Sunday, Apr 19
Sold by Arizy and ships from Amazon Fulfillment.
+
$39.61
Get it as soon as Friday, Apr 17
In Stock
Ships from and sold by Amazon.com.
Total price: $00
To see our price, add these items to your cart.
Details
Added to Cart
Some of these items ship sooner than the others.
Choose items to buy together.

Customers also bought or read

Loading...

Editorial Reviews

Amazon.com Review

Coauthored by Brian Kernighan, one of the pioneers of the C programming language, The Practice of Programming is a manual of good programming style that will help any C/C++ or Java developer create faster, more maintainable code.

Early sections look at some of the pitfalls of C/C++, with numerous real-world excerpts of confusing or incorrect code. The authors offer many tips and solutions, including a guide for variable names and commenting styles. Next, they cover algorithms, such as binary and quick sorting. Here, the authors show how to take advantage of the built-in functions in standard C/C++. When it comes to data structures, such as arrays, linked lists, and trees, the authors compare the options available to C, C++, Java, and even Perl developers with a random-text-generation program (using a sophisticated Markov chain algorithm) written for each language.

Subsequent sections cover debugging tips (including how to isolate errors with debugging statements) and testing strategies (both white-box and black-box testing) for verifying the correctness of code. Final sections offer tips on creating more portable C/C++ code, with the last chapter suggesting that programmers can take advantage of interpreters (and regular expressions) to gain better control over their code. A handy appendix summarizes the dozens of tips offered throughout the book.

With its commonsense expertise and range of examples drawn from C, C++, and Java, The Practice of Programming is an excellent resource for improving the style and performance of your code base. --Richard Dragan

Review

"The book fills a critical need by providing insight into pragmatic designand coding issues so that programmers become better at their craft...Programmers just out of school should be given this book on their first day of work. It will save employers thousands of dollars due to lost productivity and "mindless" debugging." -- Paul McNamee, Computer Scientist, Johns Hopkins University Applied Physics Laboratory

"The examples are just about right. Chapter 3's example (markov) is stellar; it is simple, thought-provoking, elegant, and most importantly, provides an opportunity to analyze good design... It is the most concise book of its kind and offers the most useful, no-nonsense treatment of how to program from authors who know a great deal about the topic." --
Peter Memishian, Member of Technical Staff, Sun Microsystems

"There is a tendency for many books to be in the high hundreds of pages long these days with very little justification. This text is well-written, and is not overly interdependent, thus allowing the reader to "skip around" as interests motivate.... I found [the examples] to be interesting. I like it when I don't have to spend time figuring out an example and I can concentrate on the lesson the example is trying to teach. Too many books have overly-complex examples, and this one doesn't." --
Chris Cleeland, Technical Lead, IONA Technologies, Inc.

"A great candidate to fill this widely perceived lack in the literature... Very solid and very educational, this manual is one I highly recommend to all programmers." --
Dr. Dobb's Electronic Review of Computer Books

"An outstanding book... a readable and well-written style combined with their experience and valuable expertise." --
Sys Admin

"This book is full of good common sense. In addition it is written in highly readable English. Pick up a copy, choose any chapter and start reading. I think you will then feel motivated to buy yourself a copy... Whatever language you program in, I think you will benefit from reading this book." --
Association of C & C++ Users

Rating 9/10: "Practical and enjoyable, this book captures its authors' considerable wisdom and experience." --
Slashdot.org

Read the full review for this book.

To be honest, there are quite a few books around that teach algorithms and the fundamentals of computer programming. The problem is that those books are commonly designed to support academic classes in computer science, and consequently shine on the theoretical side but leave something to be desired on the pragmatic front.

The Practice of Programming is a great candidate to fill this widely perceived lack in the literature that I commonly refer to as "for the industry." Authored by two experienced researchers of the Computing Science Research Center at the well-known Bell Labs (the name Brian Kernighan will ring a bell to the millions of C programmers), this manageable text conveys a fantastic quantity of suggestions and guidelines that will come in useful to all the neophytes of programming, and at the same time provides some sound tips and principles to the more seasoned among us. The first chapter approaches the delicate topic of good coding style; while the opinions on this are always subjective, those expressed by the authors seem generally acceptable and worth following. --Davide Marcato, Dr. Dobb's Electronic Review of Computer Books -- Dr. Dobb's Electronic Review of Computer Books

Product details

About the author

Follow authors to get new release updates, plus improved recommendations.
Brian W. Kernighan
Brief content visible, double tap to read full content.
Full content visible, double tap to read brief content.

Discover more of the author’s books, see similar authors, read book recommendations and more.

Customer reviews

4.6 out of 5 stars
174 global ratings

Customers say

Customers find the book's content comprehensive, covering every aspect of practical programming. Moreover, the writing style is exceptional, with one customer noting it shows how to write good programs. Additionally, the book is easy to follow, with one customer mentioning it serves as a quick refresher.
AI Generated from the text of customer reviews

Select to learn more

23 customers mention content, 22 positive, 1 negative
Customers praise the book's comprehensive content, with one review noting it covers every aspect of practical programming, while another mentions it is particularly useful for C and C++ developers.
Best book of its kind. Clean, simple prose which re-inforces, again and again, the craft of the professional programmer....Read more
An excellent book covering all of the essential areas of knowledge necessary to become a professional programmer and should be required reading for...Read more
It is a masterpiece....Read more
Item as described. Satisfactory/Adequate. Thank you.Read more
8 customers mention readability, 7 positive, 1 negative
Customers find the book easy to follow, with one mentioning it serves as a great quick refresher.
...put off some readers, this is a volume that is worth reading and re-reading....Read more
This book gets to the heart of a number of important, readily understood and (sadly) often dismissed factors affecting software development quality....Read more
...Easy to read and easy to follow.Read more
...and application of knowledge, not a lot of extraneous verbiage, just simple, solid content....Read more
7 customers mention writing style, 7 positive, 0 negative
Customers praise the writing style of the book, with one customer noting its simple prose and another highlighting how it shows how to write good programs.
Brian Kernighan is a very, very good writer, probably the best to have ever tackled the topic of computer programming....Read more
Best book of its kind. Clean, simple prose which re-inforces, again and again, the craft of the professional programmer....Read more
Brian Kernighan demonstrates conciseness in communication and clarity in his writing....Read more
...I was told the writing and the content were exceptional. The book was sent quickly and so both the book itself and the service were excellent.Read more

Top reviews from the United States

  • Reviewed in the United States on March 4, 2026
    Format: PaperbackVerified Purchase
    Brian Kernighan is a very, very good writer, probably the best to have ever tackled the topic of computer programming. This book is essentially a collection of topics he and Rob thought were interesting to write about and it's not clear who the audience of this book is. I.e., it is basically a blog in book form. By the time someone is a freshman or sophomore in college he or she should know a lot of the material or be able to immediately grasp the true solution to the problems posed and wonder what the point of the sub-optimal discussion (e.g., around the spam filter) is. So in one respect, the book is almost completely pointless -- though let it be said, I do appreciate the perspectives on what constitutes good programming style. On the other hand, the book exists to be appreciated and to be a model for other writers.
  • Reviewed in the United States on December 31, 2011
    Format: PaperbackVerified Purchase
    Kernighan & Pike's "The Practice of Programming" (TPOP) is a short book in the general-advice-on-everything-related-to-programming genre. Both authors have impressive pedigrees, predisposing one to expect much from them. This book delivers: though the focus on C and the text's conciseness might put off some readers, this is a volume that is worth reading and re-reading.

    The Good: it is a sad fact that even though a work like E. H. Gombrich's "Story of Art" attracts favorable reviews from young readers and accomplished artists alike, there are many programmers who feel the need to point out that they already know everything covered in Kernighan & Pike's TPOP. Let there be no doubt about this: "The Practice of Programming" is a masterful work, containing distilled wisdom. TPOP belongs to a very short list of programming books that deserve careful reading of even the minutest detail and amply reward such effort (Jon Bentley's "Programming Pearls" is another text on this list). Kernighan & Pike's text covers every aspect of practical programming, from style, through data structures, design, debugging, testing, performance, portability, up to special-purpose languages. It authoritatively covers a huge variety of topics, bringing to mind another important text, Steve McConnell's "Code Complete", which is easier to read, more detailed, and therefore 3.5 times longer. Even so, it's interesting to note that, unlike TPOP, "Code Complete" does not include exercises and does not discuss topics like tail recursion or endianness. On a different note, any book addressing the totality of programming is bound to disappoint a fraction of its potential readers by not using the language du jour. Kernighan & Pike have tried to preempt such complaints by including some mention of C++, Java, awk, and Perl, but in its core this book is C-oriented. C is still the lingua franca of programming, so this seems appropriate; as the authors put it, C "gives the programmer complete control over implementation, and programs written in it tend to be fast." Despite the conciseness and technical nature of TPOP, the authors manage to keep things flowing without mincing their words, e.g. "a lot of quick and dirty code ends up in widely-used software, where it remains dirty and often not as quick as it should have been anyway". Intriguingly, they are equally direct when discussing C-related issues, e.g. "rather than having memcpy for speed and memmove for safety, it would be better to have one function that was always safe, and fast when it could be." They also sneak in a joke or two, e.g. an enumerator in Plan 9's errors.h is called Egreg, which would have been funny even if it wasn't followed by the inimitable comment "It's all Greg's fault".

    The Bad: parts of this book are non-trivial, e.g. the interplay of split() and advquoted() in the second C version of the CSV library. I'm bringing this up in the section on "The Bad" only because it's customary to expect a lot of filler in books on programming. In reality, this is one of the good aspects of TPOP: even when things get intricate it's worth putting in the effort to figure out what's going on. To quote Faulkner's (alleged) admonition in response to the complaint that some of his works are difficult to understand even after two or three readings: "read it a fourth time!" Of course, even though Kernighan & Pike are much more competent than the average programming author, they're still human, so they do sometimes produce phrases like this one: "Well-written programs are better than badly-written ones". At a more detailed level, I did notice a few minor issues. For example, in chapter 1 the authors rewrite a Java class and then say that the new version is better because "it leads to statements like queue.capacity++". However, directly accessing and changing a member variable violates encapsulation. Still at a fine-grained level, I spotted only one issue regarding the C code (other than the need to keep a reference handy at all times). In chapter 3 the authors say that the programs they show are production code and they also state that "the C programmer must do more of the work, allocating and reclaiming memory, creating hash tables and linked lists, and the like". Given both these points, one would expect that best practices imply that malloc'ed memory should be explicitly free'd, out of respect for the maintenance programmers to follow. However, the Markov chain C program does not do this. Finally, some of what this text has to say on C++ is non-idiomatic (though almost always still correct). Kernighan & Pike matter-of-factly mention or use int main(void), strcpy, strstr, and realloc in C++. A C++ aficionado might even go so far as to note that when they do use std::string (instead of C-style strings, as in the rest of the text) they get the number of characters from [the strlen() descendant] length() instead of [the STL mainstay] size().

    In a nutshell, this book is a classic and is destined to remain one. This should come as no surprise to those who've read Kernighan & Pike's earlier "The Unix Programming Environment". Highly recommended.

    Alex Gezerlis
    26 people found this helpful
    Report
  • Reviewed in the United States on December 7, 2005
    Format: PaperbackVerified Purchase
    An excellent book covering all of the essential areas of knowledge necessary to become a professional programmer and should be required reading for those without a formal computer science background. The examples are brief but rich in content. Major topics covered include: style, algorithms, design, implementation, optimization, interfaces, debugging, testing, performance, portability, and notation (languages). Each topic is discussed with emphasis on content and application of knowledge, not a lot of extraneous verbiage, just simple, solid content. This text is also great as a quick refresher for information on lists, hash tables, trees, algorithmic design and implementation, and good interface design rules. Provided are good "rules of thumb" for debugging and thoughts on portability along with ideas for writing code generators.

    Some of the examples can be somewhat terse and break the authors rules for clarity and following standard language idioms. However, it is highly recommended to take the time to fully understand the examples in order to extract the most benefit. One final note, while working on a large re-engineering project we have proven that the "bear" technique really works, you'll have to read the text for the answer, it deals with auditory versus visual triggers and thinking.
    7 people found this helpful
    Report
  • Reviewed in the United States on November 24, 2015
    Format: PaperbackVerified Purchase
    This book gets to the heart of a number of important, readily understood and (sadly) often dismissed factors affecting software development quality. Although the concepts are agnostic, the presentation is C centric and probably less valuable to those who don't know C. I've started using this book (again) with less experienced C developers or those that have never had the opportunity to consider code as an organizational asset where quality of construction has a tangible organizational value in the long term.
    6 people found this helpful
    Report
  • Reviewed in the United States on January 4, 2021
    Format: PaperbackVerified Purchase
    I wish this book came out 50 years ago when I started coding. It would have made my lifer easier. I noticed right off if the principles, set out in this book, were put to use in ones life one would have a simpler and easier walk through this world. The main principles are:
    1.keep the solution simple
    2. write the code so others can understand it
    3. annotate your code.
    4. do not use fancy tricks just to show off

    Good book buy it and live by it.
    4 people found this helpful
    Report
  • Reviewed in the United States on September 14, 2021
    Format: PaperbackVerified Purchase
    Brian Kernighan demonstrates conciseness in communication and clarity in his writing. The same has been true of software he's designed as well as examples in his books. In a world of 1,200 page forest killers, this 265p book contains as much with higher value. Broadly applicable, but most examples are in C. The more experienced you are, the more you'll appreciate it: Simplicity, Clarity, Generality
    3 people found this helpful
    Report

Top reviews from other countries

  • Sergio
    5.0 out of 5 stars Five Stars
    Reviewed in Canada on January 16, 2016
    Format: PaperbackVerified Purchase
    The best book
  • Paula
    5.0 out of 5 stars Pratice of programmng
    Reviewed in Spain on June 1, 2015
    Format: PaperbackVerified Purchase
    Ha cumplido mis espectativas con creces, muy contenta con el resultado del envio y de la compra
    muy amables, paula
  • Lorenzo Beretta
    5.0 out of 5 stars Uno dei libri tecnici migliori in assoluto
    Reviewed in Italy on December 12, 2024
    Format: PaperbackVerified Purchase
    Qua e là alcuni specifici dettagli sono datati (hash moltiplicativi... ma anche no).

    Ma non importa, perchè nel complesso il libro è ottimo.
    Avete presente quando vi trovate a osservare come lavora un collega più esperto, e imparate per osmosi una serie di abitudini e magari qualche trucco sparso? Ecco, questo libro è praticamente la versione cartacea; utilissimo per chi è alle prime armi, godibilissimo per chi si è già fatto le ossa.

    Anche se non credo che riuscirò mai ad affrontare l'esercizio 1.3...
  • Laurent Rosenfeld
    5.0 out of 5 stars A very good book
    Reviewed in France on March 6, 2017
    Format: PaperbackVerified Purchase
    A very good book that I had read on-line, but thought it was good to have in a paper version.
  • Amazon Kunde
    5.0 out of 5 stars A classic
    Reviewed in Germany on January 3, 2021
    Format: PaperbackVerified Purchase
    For me a classic. Although I could use the direct C oriented examples direktly, the topics are general enough to standnthe test od time. I could recognise quite a lot of the principles in the Go programming language design decisions.