# Fundamentals of Computer Programming

Credits | 3 |

Block | Summer 2nd 8 week |

Start | June 15th 2020 |

End | August 7th 2020 |

Time | 12:10pm - 1:00pm EDT |

Office Hours | By Appointment |

Grading | pass/fail |

CRN | 14700 |

**Fundamentals of Computer Programming** is an introductory-level computer skills course,
aimed at bringing mathematicians the fundamental computer skills they need to thrive in
research, teaching, and industry.

To that end, we cover a lot of subjects at a little depth - focusing on the key objects you will need to use common scientific computing libraries, in the hopes that you will be able to learn the more specialized tools for your field from there.

The course is organized according to a collection of key skills, spread out among the weekdays. Each class will consist of a roughly 20 minute lecture, a 20 minute worksheet, and a 10 minute group discussion on the worksheet.

Grading is participation based; some worksheets will have **Brightspace** components, while a few involve uploads to the department server. You are encouraged to finish the worksheet by the next class, as the days often build off each other, but you will earn a passing grade if you complete all the worksheets in a timely manner.

Classes will be conducted on **Zoom**, recorded, and uploaded to **Youtube**, linked on each day's page. We will decide the time based on the best availability of the students. Attendance is not required, but you will need to meet with me periodically during the semester if you are unable to make it during the regular sessions.

Success in this course means being able to demonstrate basic proficiency in all the listed skills. I will do my best to help you get there, and believe it is possible for every member of the department. At the end of the course, you will start a project of your own design. This project is the final, but is ungraded, and success will be considered based on your own satisfaction with your skills gained and a brief presentation.

# Calendar

- Syllabus day
- Introductions
- Syllabus
- Environment setup

- Bash day 1
- Learning to use text terminals
- Learning basic text terminal commands
- Invoking programs
- Batch file operations
- Wildcards
- Searching contents of files

- Bash day 2
- SSH connections to department servers
- SSH keys for passwordless authentication
- SCP access to your department files
- GNU Screen for session persistence
- Running jobs on department compute servers

- $\LaTeX$ day 1
- How to invoke $\LaTeX$
- Document type: Article
- Importing packages
- Math fields
- Simple math commands

- $\LaTeX$ day 2
- Using newcommand
- Creating environments
- Indexing
- Parameters
- Optional parameters

- $\LaTeX$ day 3
- Document type: Beamer
- Installing custom $\LaTeX$ packages/themes

- $\LaTeX$ day 4
- Bibliographies, Footnotes
- Absolute Positioning

- $\LaTeX$ day 5
- Academic Papers
- Importing Images/data
- Books
- Conforming to Journal Requirements

- CV Day
- Write a TeX Curriculum Vitae

- HTML day 1
- Hello World from scratch
- Looking under the hood of websites
- Using inspectors
- Changing content on webpages

- HTML day 2
- Saving websites
- Combining features of websites
- Creating your own department website
- Uploading your website to the department index

- Python Day 1
- Hello world
- Datatypes: int, str, float
- Datatypes: list, set, dict
- Functions

- Python Day 2
- Flow Control
- Loops
- Conditionals
- Comprehensions

- Python Day 3
- Object Oriented Programming
- Classes
- Methods
- Formatting strings

- Independence Day Eve
- Python Day 4
- Using Libraries/Modules/Packages
- Stdlib math module
- Stdlib statistics module
- Stdlib random module
- Documenting
- Basic testing
- Creating modules

- Python Day 5
- Advanced Flow Control
- Error Throwing/Catching
- Breaking Loops
- Errors

- Python Day 6
- Reading/writing files
- Navigating files with os
- Stdlib datetime
- Pickling/unpickling objects
- Saving state, resuming computations

- Numpy Day 1
- Numpy datatypes
- Numerical precision
- Numpy arrays

- Numpy Day 2
- Reshaping arrays
- Types of array product
- Convolving arrays

- MatPlotLib Day 1
- Constructing axes, plots
- Plotting numpy data
- Plotting python functions
- Subplots
- Axis labels
- Saving

- MatPlotLib Day 2
- Bar graphs
- Scatter plots
- Advanced Axis Label Formatters
- 3D Plotting

- Pandas Day
- Reading data files
- Dataframe object
- Large data operations
- Plotting from pandas

- SymPy Day 1
- Sympy objects: variable, expression
- Identifying objects
- Extracting data from objects

- Git day 1
- Git init
- Commit messages
- Reading commit comments
- Traversing the commit history

- Git day 2
- Github
- Git pull
- Basic branching
- Stashing

- Git/Sympy Project Day
- Collaborating
- Merging commits
- Working on a project
- Parsing strings into expressions

- SQL Day 1
- Designing data models
- Primary keys
- Compound keys
- First 3 normal forms

- SQL Day 2
- Constructing your first database
- Creating tables
- Inserting data
- Selecting data
- Simple Joins

- SQL-Python Project Day 1
- Sql python interface
- Importing data
- Creating reports
- Using databases in production

- SQL-Python Project Day 2
- Python command line interfaces
- Statistical Queries, Aggregators

- MATLAB Day 1
- How to MATLAB on a budget
- MATLAB datatypes, precision
- Basic matrix operations
- Arrays
- Reshaping arrays

- MATLAB Day 2
- Flow Control
- How to loop, why not to
- Plotting
- Labeling axes
- Line graphs
- Bar graphs
- Scatter plots

- Advanced Graphing Tools
- Geogebra 2D and 3D Interactive Plotting
- Geogebra Geometry tools
- Geogebra Exports
- Inkscape Editing
- SVG

- Scikit Learn Day 1
- A learning adventure, together

- Scikit Learn Day 2 + Regular Expressions
- Continuing this adventure
- And Regular Expressions, Too

- End of Summer Project
- Finals (day 1)
- Finals (day 2)
- Finals (day 3)