If you’re familiar with the programming series Handmade Hero, you might be wondering where you can find more information on how to program things in a way that aligns with the Handmade Philosophy.
The best place to look for information is through C, a concise and relatively low-level language that encourages problem solving through programming.
But C is old — older than the internet! And several decades ago, most C programmers moved on to C++, which, at this point, has abandoned its C roots. So now there is little incentive to write new tutorials, or update old ones.
Fortunately, C’s age can be leveraged as an advantage. All we need to do is to look to the time when C was thriving. A time before the internet had changed everything—a time when updates and revisions were so costly, considerable effort was taken to get things right the first time — a time well preserved in old books! And best of all, most of the books are not outdated, because the language hasn't changed much since 1999.
So now that the dust has long settled, which C books have withstood the test of time? I’ve compiled a list of all of the C-specific books that are highly regarded by C authors and programming professionals. It is arranged (very roughly) by technical level.
C Programming: A Modern Approach (2nd Edition)
King | 805 pages (ISBN-13: 978–0393979503)
Category: Active Reading
A favorite of reddit.com/r/c_programming, and for good reason. This is definitely my top recommendation for beginner programmers due to its thorough coverage of the language, highly pedagogical approach to exercises, and remarkably well-tuned difficulty curve. Unfortunately, because of its popularity, this is the hardest C book on the list to find at a good price.
C Primer Plus (6th Edition)
Prata | 1037 pages (ISBN-13: 978-0672326967)
Category: Active Reading
It may not have quite the reputation of C Programming: A Modern Approach, but it does have André LaMothe's seal of approval. This is also the only book on this list with any amount of C11 coverage. Generally this book is well liked, and is a good book alternative to King's book for someone starting out their journey as a C programmer.
The Joy of C (3rd Edition)
Miller, Quilici | 788 pages (ISBN-13: 978-0471129332)
Category: Active Reading
I've never seen anyone mention this book, but I think it's worth mentioning. It was written, and more importantly, used by programming teachers to teach C. For this reason it's written quite pedagogically. Although it claims it assumes a bit of prior programming knowledge, I'd argue that this is one of the better texts for beginners. Alas, it was never updated to C99. Still, there's a lot to like about this book; it even comes with your very own floppy disc!
The C Programming Language (2nd Edition)
Kernighan, Ritchie | 272 pages (ISBN-13: 978–0131103627)
Category: Active Reading
Written by the creators of the language, this book is the go-to recommendation for programmers with experience in another language. It is concise, and well written. However, I think beginners should avoid this as a first book. Not only is it the oldest on the list, it also doesn't cover C99, it assumes quite a bit of prior programming knowledge from the beginning, and the exercises are sporadic in difficulty.
If you're looking to save money, I recommend searching for the Eastern Economy Edition first (ISBN 13: 978-8120305960). It has the same content, but is generally more affordable (at the cost of slightly worse print/paper quality).
C Programming FAQs
Summit | 389 pages (ISBN-13: 978–0201845198)
Category: Passive Reading / Reference
This title contains answers to over 400 questions based on real questions that were frequently brought up on the old Usenet forums. That doesn’t mean it only covers beginner topics; on the contrary, it has plenty of specific, well cited, information related to edge cases and the rarely encountered quirks of the language. Arranged by category, it’s also valuable as a reference.
Expert C Programming: Deep C Secrets
Linden | 353 pages (ISBN-13: 978–0131774292)
Category: Active Reading / Passive Reading
Highly recommended by some of the best C programmers (such as Fabien Sanglard) as the book to read after The C Programming Language, and widely regarded as perhaps the most entertaining book written on C. It was written by an author who was dissatisfied with dry C(++) texts, and it is indeed a joy to read!
C Unleashed
Heathfield, Kirby, et. al | 1344 pages (ISBN-13: 978-0672318962)
Category: Passive Reading / Active Reading
Despite its terrible title, this massive tome has a lot of good information. It covers topics widely applicable topics like stylistic conventions, and optimization techniques, as well as more advanced topics like Digital Signal Processing, Writing Common Gateway Interface Applications in C, and Arbitrary Precision Arithmetic (though some topics might not reach the desired level of depth). Its slightly informal style, reminiscent of Expert C Programming, makes it an enjoyable read!
C Traps and Pitfalls
Koenig | 147 pages (ISBN-13: 978–0201179286)
Category: Passive Reading
Easily the slimmest book on this list, it's is a quick read, and a great way to help you avoid scraping against the rough edges of the C language that even professional level programmers run into.
Writing Solid Code (1st Edition)
Maguire | 256 pages (ISBN-13: 978–1556155512)
Category: Passive Reading
Focusing mostly on reducing error-prone tendencies and writing bug-free code, this entry comes from a former Director of Development at Microsoft, and covers topics like proper assert usage, understanding data flow, and reducing ambiguity. Note that a second edition is available, though it appears to not be specific to C.
The Standard C Library
Plauger | 498 pages (ISBN-13: 978–0131315099)
Category: Reference
This book’s main claim to fame is that it has an complete implementation of the (C89) C Standard Library. That alone makes it worth picking up for anyone interested in learning about the library, but it also has thorough explanations, making this book the definitive C Standard Library reference.
C: A Reference Manual (5th Edition)
Harbison, Steele | 533 pages (ISBN-13: 978–0130895929)
Category: Reference
Well regarded as the C reference to own, this surprisingly slim manual has a plethora of technical information related to the C89 and C99 standards. Though its organization may be a little off-putting at first, its information coverage is excellent.
C Specifications/Standards
C89: ANSI X3. 159-1989
C90: ISO/IEC 9899:1990
C95: ISO/IEC 9899:1990/AMD1:1995
C90: ISO/IEC 9899:1999
C11: ISO/IEC 9899:2011
C18: ISO/IEC 9899:2018
C2x: Revision Charter
Category: Reference
It is occasionally necessary to review the various C standards depending on the project you are working on. This is about as technical as it gets.
Errata
No book on this list is free from error, so it's a very good idea to be aware of the errata related to whatever book you are reading (especially reference material). Even if the author or publisher never released errata, chances are, someone has.
Others worth mentioning:
Notes on purchasing:
The best place to look for information is through C, a concise and relatively low-level language that encourages problem solving through programming.
But C is old — older than the internet! And several decades ago, most C programmers moved on to C++, which, at this point, has abandoned its C roots. So now there is little incentive to write new tutorials, or update old ones.
Fortunately, C’s age can be leveraged as an advantage. All we need to do is to look to the time when C was thriving. A time before the internet had changed everything—a time when updates and revisions were so costly, considerable effort was taken to get things right the first time — a time well preserved in old books! And best of all, most of the books are not outdated, because the language hasn't changed much since 1999.
So now that the dust has long settled, which C books have withstood the test of time? I’ve compiled a list of all of the C-specific books that are highly regarded by C authors and programming professionals. It is arranged (very roughly) by technical level.
C Programming: A Modern Approach (2nd Edition)
King | 805 pages (ISBN-13: 978–0393979503)
Category: Active Reading
A favorite of reddit.com/r/c_programming, and for good reason. This is definitely my top recommendation for beginner programmers due to its thorough coverage of the language, highly pedagogical approach to exercises, and remarkably well-tuned difficulty curve. Unfortunately, because of its popularity, this is the hardest C book on the list to find at a good price.
C Primer Plus (6th Edition)
Prata | 1037 pages (ISBN-13: 978-0672326967)
Category: Active Reading
It may not have quite the reputation of C Programming: A Modern Approach, but it does have André LaMothe's seal of approval. This is also the only book on this list with any amount of C11 coverage. Generally this book is well liked, and is a good book alternative to King's book for someone starting out their journey as a C programmer.
The Joy of C (3rd Edition)
Miller, Quilici | 788 pages (ISBN-13: 978-0471129332)
Category: Active Reading
I've never seen anyone mention this book, but I think it's worth mentioning. It was written, and more importantly, used by programming teachers to teach C. For this reason it's written quite pedagogically. Although it claims it assumes a bit of prior programming knowledge, I'd argue that this is one of the better texts for beginners. Alas, it was never updated to C99. Still, there's a lot to like about this book; it even comes with your very own floppy disc!
The C Programming Language (2nd Edition)
Kernighan, Ritchie | 272 pages (ISBN-13: 978–0131103627)
Category: Active Reading
Written by the creators of the language, this book is the go-to recommendation for programmers with experience in another language. It is concise, and well written. However, I think beginners should avoid this as a first book. Not only is it the oldest on the list, it also doesn't cover C99, it assumes quite a bit of prior programming knowledge from the beginning, and the exercises are sporadic in difficulty.
If you're looking to save money, I recommend searching for the Eastern Economy Edition first (ISBN 13: 978-8120305960). It has the same content, but is generally more affordable (at the cost of slightly worse print/paper quality).
C Programming FAQs
Summit | 389 pages (ISBN-13: 978–0201845198)
Category: Passive Reading / Reference
This title contains answers to over 400 questions based on real questions that were frequently brought up on the old Usenet forums. That doesn’t mean it only covers beginner topics; on the contrary, it has plenty of specific, well cited, information related to edge cases and the rarely encountered quirks of the language. Arranged by category, it’s also valuable as a reference.
Expert C Programming: Deep C Secrets
Linden | 353 pages (ISBN-13: 978–0131774292)
Category: Active Reading / Passive Reading
Highly recommended by some of the best C programmers (such as Fabien Sanglard) as the book to read after The C Programming Language, and widely regarded as perhaps the most entertaining book written on C. It was written by an author who was dissatisfied with dry C(++) texts, and it is indeed a joy to read!
C Unleashed
Heathfield, Kirby, et. al | 1344 pages (ISBN-13: 978-0672318962)
Category: Passive Reading / Active Reading
Despite its terrible title, this massive tome has a lot of good information. It covers topics widely applicable topics like stylistic conventions, and optimization techniques, as well as more advanced topics like Digital Signal Processing, Writing Common Gateway Interface Applications in C, and Arbitrary Precision Arithmetic (though some topics might not reach the desired level of depth). Its slightly informal style, reminiscent of Expert C Programming, makes it an enjoyable read!
C Traps and Pitfalls
Koenig | 147 pages (ISBN-13: 978–0201179286)
Category: Passive Reading
Easily the slimmest book on this list, it's is a quick read, and a great way to help you avoid scraping against the rough edges of the C language that even professional level programmers run into.
Writing Solid Code (1st Edition)
Maguire | 256 pages (ISBN-13: 978–1556155512)
Category: Passive Reading
Focusing mostly on reducing error-prone tendencies and writing bug-free code, this entry comes from a former Director of Development at Microsoft, and covers topics like proper assert usage, understanding data flow, and reducing ambiguity. Note that a second edition is available, though it appears to not be specific to C.
The Standard C Library
Plauger | 498 pages (ISBN-13: 978–0131315099)
Category: Reference
This book’s main claim to fame is that it has an complete implementation of the (C89) C Standard Library. That alone makes it worth picking up for anyone interested in learning about the library, but it also has thorough explanations, making this book the definitive C Standard Library reference.
C: A Reference Manual (5th Edition)
Harbison, Steele | 533 pages (ISBN-13: 978–0130895929)
Category: Reference
Well regarded as the C reference to own, this surprisingly slim manual has a plethora of technical information related to the C89 and C99 standards. Though its organization may be a little off-putting at first, its information coverage is excellent.
C Specifications/Standards
C89: ANSI X3. 159-1989
C90: ISO/IEC 9899:1990
C95: ISO/IEC 9899:1990/AMD1:1995
C90: ISO/IEC 9899:1999
C11: ISO/IEC 9899:2011
C18: ISO/IEC 9899:2018
C2x: Revision Charter
Category: Reference
It is occasionally necessary to review the various C standards depending on the project you are working on. This is about as technical as it gets.
Errata
No book on this list is free from error, so it's a very good idea to be aware of the errata related to whatever book you are reading (especially reference material). Even if the author or publisher never released errata, chances are, someone has.
Others worth mentioning:
- ANSI and ISO Standard C Programmer's Reference — Perhaps not the go-to reference that Harbison and Steele is (it only covers C89), it's still written by respected authors
- The Annotated ANSI C Standard — Whether or not the annotations are worth anything doesn't matter, this is the cheapest way to get a hard copy of the C89 standard
- A Book on C — This is the book Eskil Steenberg used to learn C
- Portable C Software — Listed in C Programming FAQs as a "respected reference"
Notes on purchasing:
- Owning a book is not the same as reading a book. It’s best to purchase 1–2 books at first, based on your skill and interest level, before going overboard purchasing every single book on this list. Don’t do that! Pick up no more than one from each category to start with. These books take up a lot of space anyway.
- Most of the books on this list can be acquired very cheaply. However, some cannot — the most notable exception being C Programming: A Modern Approach. I recommend purchasing used, and frequently checking sites such as eBay, ThriftBooks, Biblio, and BookFinder. I don't recommend using Amazon; the prices there are awful. Keep in mind that combined shipping might be an option depending on where you purchase.
- Google any books you are interested in first to explore their contents before making any decisions.