# Introduction¶

Quote

"The mathematics of modern computer science is built almost entirely on discrete mathematics, in particular combinatorics and graph theory." David Patrick for the Art of Problem Solving in *Why Discrete Mathematics is Important*

When software engineers design and implement computer programs, they use, for instance, higher-order, lambda, and generating functions to create and manipulation of discrete structures (e.g., numbers, lists, and dictionaries) that have distinct values. When engineers describe a discrete structure using formal mathematical notation, it better enables them to see both the trade-offs in the structure's design and implementation and the connection between one structure and another. As pointed out by the The Art of Problem Solving team in the article *Why Discrete Mathematics is Important*, "the mathematics of modern computer science is built almost entirely on discrete mathematics." This course will give you a foundation in both programming and discrete mathematics!

In the context of Python programming, this course teaches you how to use **functions** and the **discrete structures** that form their input and output. Leveraging this knowledge of discrete structures and functions, you will learn how to read and translate concepts expressed in **natural language**, **formal mathematical notation**, and **Python programs**. Positioning you for successful work in both theoretical and practical computer science, this course imparts to a learner an applied understanding of topics like **Boolean logic**, **set theory**, and **probability theory**. You will combine your knowledge of the aforementioned topics as you specify, design, document, implement, and test Python programs that employ the best practices for **efficiency**, **correctness**, and **understandability**.

*Let's first proactively explore the learning objectives for a course in discrete structures!*