Resources
Here you find currated lists of resources worth considering to support a journey towards deep understanding of C. (Warning: I would not recommend this stuff to programmers just starting their journey into learning C)
Books about C (in no particular order):
- The C Programming Language (1978), Brian W. Kernighan and Dennis M. Ritchie - an absolute masterpiece that defined the standard for how to write books about computer programming. At the time, it was also the only proper reference for the C programming language. While the version of C described and the syntax used in the book is dated, it is still just a wonderful book that every hardcore C programmer should read.
- The C Programming Language (1988, 2nd ed), Brian W. Kernighan and Dennis M. Ritchie - any serious C programmer must read this book - not only once, but regularly. 30+ years later, it is (unfortunately) still the best book every written about C.
- Expert C Programming - Deep C Secrets (1994), Peter van der Linden - To me, this was the eyeopener and a first step into a a deeper understanding of C. Indeed, it was the main inspiration for the Deep C slides, and therefore also a main inspiration for this site.
- Effective C (2020), Robert C. Seacord - Lots of books have been written about C the last few years, but this one stands out as a really nice and proper book about the C programming language. Highly recommeneded, and a very good (re-)introduction to the C programming language for those who already know another programming language well. It is precise in the wording and have direct references into the C standard.
- The C Standard (2003), The British Standards Institution - It is just a reprint of available text, but still it is nice to have it collected in a physical book. In particular Section A, The C Rationale, is extremely important to be familiar with IMHO.
- BCPL: The Language and its Compiler (1979), Martin Richards and Colin Whitby-Strevens - As you probably know, the original C, and before that B, was basically just a syntactic reimplementation of BCPL. Semantically C is very simlar to BCPL, and many of the core ideas came from Martin Richards and his BCPL language. This book is an eye opener when trying to understand where many of the clever ideas implemented in C comes from.
- The New C Standard (2002), Derek M. Jones - this book had a publisher, and an ISDN number, but was never actually published. An updated version is available online. It is a strange, but very fascinating and educational book. Derek carefully studied every sentence in the C99 standard (about 160 pages), with elaborated commentaries and comparisons to C99 - and he ends up with a book of more than 1600 pages.
- The Design and Evolution of C++ (1994), Bjarne Stroustrup - you might be surprised to find a C++ book on this list, but the impact of C++ and Bjarne Stroustrup has had on the evolution of the C programming language is very undercommunicated. It is worth knowing that the C standardization process (ANSI C) was largely driven by a need to enable C++ to be standardized.
- The Linux Programming Interface (2010), Michael Kerrisk - 1500+ pages packed with high quality C code in a very specific and relevant context. If learning by real examples is relevant to you, then studying this book is definitely worth it.
- UNIX - A History and a Memoir (2020), Brian Kernighan - C and Unix grew together and escaped the Bell Labs to conquer the world. This book tells the story well and includes a lot of useful background information for those studing the history and spirit of C.
- Test Driven Development for Embedded C (2011), James W. Grenning - a well written book about modern development techniques also in a programming language like C.
Conferences about C (in no particular order):
- ACCU - ACCU was originally an acronym for Association of C and C++ users. The annual ACCU conference has C and C++ at its core. It is usually running in April in Bristol, UK.
- NDC TechTown - This annual conference in Norway is focusing on software development for products, and C and C++ has a very central role. The conference usually runs in September in Kongsberg, Norway.
Websites about C (in no particular order):
- JTC1/SC22/WG14 - C - this is the official home of the C programming language standard.
- Dennis M. Ritchie memorial web site - Dennis M. Ritchie (rip), the creator of C, is still contributing a lot through all his writings and insights.
- cppreference.com - The best online reference for C++, but also for C. High quality examples, and precise wording.
- godbolt.org - A fantastic tool when you want to study C carefully. Here you can see and compare assembler code produced by different compilers and the effect of changing compilation flags or language versions.
- comp.lang.c FAQ - a bit dated, but still very relevant FAQ about the C programming language
- Wikipedia - a very useful and usually up to date overview of the C programming language.
Legends of C (in no particular order):
- Dennis Ritchie - the creator of C
- Ken Thompson - the creator of B and creator of Unix, worked closely with Dennis M. Ritchie and is, at least indirectly, a co-creator of C.
- Martin Richards - the creator of BCPL, the frontrunner to B and indirectly also C. Many of the ideas in C can be traced back to BCPL.
- Brian W. Kernighan - contributed significantly to the success of C by communicating the ideas and concepts through books and articles.
- Bjarne Stroustrup - contributed through the standardization of ANSI C.
- Stephen C. Johnson - developed the Portable C compiler, and a lot of other Unix tools, that unleashed the success of the Unix operating system.
People to follow (in no particular order):
- John Regehr, a professor of Computer Science at the University of Utah. He runs a blog focused on embedded software where C often has a central role. He also authored the Integer in C quiz. Here are some links https://users.cs.utah.edu/~regehr/, twitter.
- Robert C. Seacord, a computer security specialist and writer. Member of Author of many books, including “Efficient C” and “The CERT C Coding Standard”. He give talks at conferences. He sometimes tweets about C. Here is his LinkedIn profile.
- JeanHeyd Meneide, active member of ISO/IEC JTC1 SC22 WG14. Shares a lot of ideas and opinions about C on twitter.
- Michael Kerrisk. Author and maintainer of the Linux man-pages. Michael has the very best courses about Linux where (of course) C is used a lot. His main book, “The Linux Programming Interface” is a masterpiece packed with high quality C code.
- Shafik Yaghmour, compiler engineer at Intel, shares a lot about C (and C++) on twitter.
- Linus Torvalds, the creator of Linux. Few have contributed more to demonstrate the power of C. Also the way Linus writes C code is worth studying. For example, the early version of the Linux kernel can be read like poetry - just wonderful and educational way of writing code.
- James Grenning, author of the TDD for Embedded C book and actively teaching classes on C programming.
Historical papers/documents/reports (in no particular order):
- The Development of the C Language (1993), Dennis M. Ritchie - a well written and important historical account on the early days of the C programming language
- The BCPL Reference Manual (1967), Martin Richards - an original description of the BCPL language that was the main inspiration for B, and therefore indirectly, C
- Users’ Reference to B (1972), Ken Thompson - an early description of the B programming language
- C Reference Manual (1975), Dennis M. Ritchi - a reference manual to what we might call C74
- Programming in C - A Tutorial (1975), Brian W. Kernighan - an early and outdated, but still brilliant, introduction to programming in C
Trivia and fun stuff related to C
- Recreating Dennis Ritchhie’s PhD Thesis -Computerphile - an amusing story about the unsubmitted PhD thesis by Dennis Ritchie.
- UNIX: Making Computers Easier To Use – AT&T Archives film from 1982, Bell Laboratories - C and Unix grew up together. Most of the tools that Brian talks about in this video is probably, or could have been, implemented in C.