# Course Schedule¶

## Software Operation¶

### Technical Question¶

- How do I install and use the industry-standard programming tools that will help me to rigorously explore discrete structures with the Python programming language?

### Next Steps¶

- All written content in and tutorials referenced by the list of proactive technical skills.

## Making Connections¶

### Technical Question¶

- How do I connect mathematical notation and concepts (e.g., mapping, function, number, and set), to the implementation of useful Python programs that declare and call functions and declare variables and manipulate their values?

### Next Steps¶

- Read chapters 1 and 2 of
*Programming and Mathematical Thinking*. - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/making-connections/`

with:

## Technical Concepts

**Mapping**: set of ordered pairs in which no two first elements are the same**Function**: a process that takes input, performs a computation, and produces output**Variable**: a storage location in memory associated with both a value and a type**Number**: a variable that stores numerical value with a minimum, maximum, and type**Set**: an unordered collection of distinct objects

## Programming Constructs¶

### Technical Question¶

- How do I use iteration and conditional logic in a Python program to perform computational tasks like processing the contents of a file and mathematical tasks like using Newton's method to approximate the square root of a number?

### Next Steps¶

- Read chapter 3 of
*Programming and Mathematical Thinking* - Read chapter 1 and Appendix B of
*Doing Math with Python* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/programming-constructs/`

with:

## Technical Concepts

**Assignment Statement**: an operation to store a value in a variable**Iteration Construct**: a structure to support the repeated execution of operations**Conditional Logic**: a construct to support decision making in a program**Quadratic Root**: value(s) of a quadratic function where it intercepts the horizontal axis**Square Root**: mathematical function that is the inverse of the square of a number

## Python Functions¶

### Technical Question¶

- How do I use non-recursive functions, recursive functions, and lambda expressions to perform mathematical operations such as computing the absolute value of a number and the mean and median of a sequence of numbers?

### Next Steps¶

- Read chapter 4 of
*Programming and Mathematical Thinking* - Read chapter 3 of
*Doing Math with Python* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/python-functions/`

with:

## Technical Concepts

**Python Function**: subroutine or procedure that accepts input, performs steps, and produces output**Recursive Function**: special type of Python function that makes a call to itself in its definition**Lambda Expression**: an expression that accepts input, performs steps, and produces output**Arithmetic Mean**: the average of a list of values calculated by summing the values and divide by the list's size**Median Value**: for a list of values sorted in increasing order, the middle value in the list

## Data Containers¶

### Technical Question¶

- How do I use the mathematical concepts of ordered pairs, n-tuples, and lists to implement efficient Python programs that use functions with a clearly specified behavior to perform tasks like the input and parsing of a comma separated value file?

### Next Steps¶

- Read chapter 5 of
*Programming and Mathematical Thinking* - Read chapter 2 of
*Doing Math with Python* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/data-containers/`

with:

## Technical Concepts

**Ordered Pair**: grouping of two elements such that their order is important**Tuple**: immutable ordered sequence that can contain elements of any type**Delimiter**: a symbol that separates data values**Flat File**: file that has no structure other than being divided into lines and fields**CSV Format**: comma-separated value files that use a comma as a delimiter to separate data

## Using Monoids¶

### Technical Question¶

- How do I use the mathematical concepts of sequences, monoids, and lists to implement efficient Python programs that use functions with a clearly specified behavior to perform tasks like finding a name in a file or computing the arithmetic mean of data values?

### Next Steps¶

- Read chapter 6 of
*Programming and Mathematical Thinking* - Read chapter 3 of
*Doing Math with Python* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/using-monoids/`

with:

## Technical Concepts

**Sequence**: a collection of ordered homogeneous elements such a strings and files**File**: a sequence of lines, where each line is itself a sequence of characters**Concatenation**: the process of joining together the contents of two or more variables to form a new variable**Monoid**: abstract discrete structure that describes the behavior of other structures in Python, including a string**Map Function**: function that applies a one-argument function to every element of a sequence

## Data Streams¶

### Technical Question¶

- How do I use dynamically generated streams of data to implement memory efficient and predictable Python programs?

### Next Steps¶

- Read chapter 7 of
*Programming and Mathematical Thinking* - All previously assigned chapters of
*Doing Math with Python* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/data-streams/`

with:

## Technical Concepts

**Static Sequence**: a sequence of values that, at any one time, exists as a complete data structure**Dynamically-Generated Sequence**: a sequence of values that is all present at once and can appear over time**Generator Function**: a function that incrementally yields its contents through an iterator**Endless Stream**: a stream of data that potentially never ends, distinguished from a not-possible infinite stream**Distributed Processing**: Computations on separate computers communicate to solve a large computation

## Set Foundations¶

### Technical Question¶

- How do I use the mathematical concepts of sets and Boolean logic to design Python programs that are easier to implement and understand?

### Next Steps¶

- Read chapter 8 of
*Programming and Mathematical Thinking* - Read chapter 5 of
*Doing Math with Python* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/set-foundations/`

with:

## Technical Concepts

**Set**: an unordered collection of distinct objects**Empty Set**: a set that does not contain any elements in it**Hashing**: using the value of an object to compute its location in a structure**Subset**: a set that contains some, but not all of, the elements in another set**Infinite Set**: set that does not have a fixed number of elements in it

## Probability Functions¶

### Technical Question¶

- How do I use the implementation of a finite set in
`Sympy`

to create Python programs that calculate and use probabilities?

### Next Steps¶

- Read chapters 4 and 5 of
*Doing Math with Python* - Read chapter 8 of
*Programming and Mathematical Thinking* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/probability-functions/`

with:

## Technical Concepts

**Power Set**: set of all possible subsets of another set**Experiment**: a test to perform to assess a probability of an outcome**Sample Space**: all possible outcomes from an experiment**Event**: set of outcomes that form a subset of the sample space**Uniform Distribution**: distribution of outcomes such that each outcome in the sample is equally likely to occur

## Mathematical Mappings¶

### Technical Question¶

- How do I use dictionaries, tuples, and lists to correctly implement efficient mathematical functions in Python?

### Next Steps¶

- Read chapter 9 of
*Programming and Mathematical Thinking* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/mathematical-mappings/`

with:

## Technical Concepts

**Mathematical Mapping**: set of ordered pairs in which no two first elements are the same**Function Domain**: set of values that are the first elements of ordered pairs in a mapping**Function Range**: set of values that are the second elements of ordered pairs in a mapping**Dictionary**: kind of static container that acts like a mapping**Key-Value Pair**: the two-tuples stored in a dictionary that map a key to a value**Multiset**: a dictionary that maps specific values to a count of their occurrence

## Object-Oriented Programming¶

### Technical Question¶

- How do I use the concept of a relation and the industrially relevant practice of object-oriented programming to correctly implement Python programs that are easy to understand and maintain?

### Next Steps¶

- Read chapter 10 (Sections 10.1 and 10.2) and chapter 11 of
*Programming and Mathematical Thinking* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/mathematical-mappings/`

with:

## Technical Concepts

**Object**: instance of a class that has both state and behavior**Method**: executable function attached to an instance of a class**Attribute**: variable providing data storage for an instance of a class**Inheritance**: mechanism for building groups of related abstractions that establishes a parent-child relationship**Information Hiding**: principle that the client of a class should only rely on the public methods of the class

## Mathematical Objects¶

### Technical Question¶

- How do I use the concepts associated with object-oriented programming to create and use objects for the purposes of performing mathematical computations like the moving average?

### Next Steps¶

- Read chapter 11 of
*Programming and Mathematical Thinking* - Check out the course slides for a detailed investigation of these chapters!
- Run the Jupyter notebooks in
`discrete-structures/mathematical-mappings/`

with:

## Technical Concepts

**Number Stream**: sequence of numbers that continues without conclusion**Moving Average**: average of fixed amount of vales in a number stream**Recursively Defined Object**: a class that is partly defined in terms of itself**Tree**: a node-based, hierarchical discrete structure with characteristics distinct from a graph**Root**: the distinguished node of a tree from which other nodes originate

## Learning Opportunities¶

Interested in learning more about any of the topics on this schedule? If you are, then make sure to connect with members of the proactive community for more learning opportunities. Remember, this course emphasizes building mastery of the course's learning objectives through "learning by doing", as explained in the description of proactive learning. As such, you can best understand the content on this schedule by completing all the source code surveys, programming projects, and engineering efforts!

2023-04-24 Updated: 2021-08-17 Created: