Discrete Mathematics is a foundational yet demanding introductory subject for Computer Science curricula, where undergraduate students typically have difficulties grasping its concepts and applications. In this work, we describe our teaching approach, using a programming language in tandem with math notation, inviting students to explore and learn its main concepts. Our goal is to build intuition through experimentation: first, evaluating expressions and running code snippets, then linking the programming constructs to mathematical notation, and finally, formalizing the underlying theory. For this, we detail our methodology and course design covering four major topics: set theory, counting, combinatorics, and propositional logic, presented as a continuous progression. Compared to the traditional teaching of Discrete Mathematics, we have quantitatively measured an increase in grades and a reduction of students dropping out of classes while perceiving an overall smooth learning curve.