This clearly written textbook presents an accessible introduction to discrete mathematics for computer science students, offering the reader an enjoyable and stimulating path to improve their programming competence. The text empowers students to think critically, to be effective problem solvers, to integrate theory and practice, and to recognize the importance of abstraction. Its motivational and interactive style provokes a conversation with the reader through a questioning commentary, and supplies detailed walkthroughs of several algorithms. This updated and enhanced new edition also includes new material on directed graphs, and on drawing and coloring graphs, in addition to more than 100 new exercises (with solutions to selected exercises). Topics and features: assumes no prior mathematical knowledge, and discusses concepts in programming as and when they are needed; designed for both classroom use and self-study, presenting modular and self-contained chapters that follow ACM curriculum recommendations; describes mathematical processes in an algorithmic manner, often supported by a walkthrough demonstrating how the algorithm performs the desired task; includes an extensive set of exercises throughout the text, together with numerous examples, and shaded boxes highlighting key concepts; selects examples that demonstrate a practical use for the concept in question. Students embarking on the start of their studies of computer science will find this book to be an easy-to-understand and fun-to-read primer, ideal for use in a mathematics course taken concurrently with their first programming course.