This book aims to be "the second book" on computer programming. The book's target readers already have some experience in writing simple programs (dozens of lines). This book has many medium-size (hundreds of lines) examples and helps readers move to large examples (thousands of lines); Describes common mistakes observed by the authors after teaching several thousand students over ten years. The book explains how to prevent, detect, and remove the mistakes; Three key concepts in C programming are often misunderstood: (1) pointers, (2) memory management, and (3) recursion. This book devotes many pages explaining these concepts using different methods (text and figures) so that readers can have a firm grasp of these concepts; explains the process of software development, more than writing code.